Index: branches/unlabeled/unlabeled-1.17.2/core/units/general/cat_tag_processor.php =================================================================== diff -u -r7642 -r7754 --- branches/unlabeled/unlabeled-1.17.2/core/units/general/cat_tag_processor.php (.../cat_tag_processor.php) (revision 7642) +++ branches/unlabeled/unlabeled-1.17.2/core/units/general/cat_tag_processor.php (.../cat_tag_processor.php) (revision 7754) @@ -99,33 +99,6 @@ return $special; } - function ExportStatus($params) - { - $export_object =& $this->Application->recallObject('CatItemExportHelper'); - /* @var $export_object kCatDBItemExportHelper */ - - $event = new kEvent($this->getPrefixSpecial().':OnDummy'); - - $action_method = 'perform'.ucfirst($this->Special); - $field_values = $export_object->$action_method($event); - - // finish code is done from JS now - if ($field_values['start_from'] == $field_values['total_records']) - { - if ($this->Special == 'import') { - $this->Application->StoreVar('PermCache_UpdateRequired', 1); - $this->Application->Redirect('in-portal/categories/cache_updater', Array('m_opener' => 'r', 'pass' => 'm', 'continue' => 1, 'no_amp' => 1)); - } - elseif ($this->Special == 'export') { - $template = $this->Application->getUnitOption($this->Prefix, 'ModuleFolder').'/'.$this->Special.'_finish'; - $this->Application->Redirect($template, Array('pass' => 'all')); - } - } - - $export_options = $export_object->loadOptions($event); - return $export_options['start_from'] * 100 / $export_options['total_records']; - } - function CatalogItemCount($params) { $object =& $this->GetList($params); Index: branches/unlabeled/unlabeled-1.4.2/core/kernel/constants.php =================================================================== diff -u -r7748 -r7754 --- branches/unlabeled/unlabeled-1.4.2/core/kernel/constants.php (.../constants.php) (revision 7748) +++ branches/unlabeled/unlabeled-1.4.2/core/kernel/constants.php (.../constants.php) (revision 7754) @@ -30,6 +30,7 @@ define('erFAIL', -1); // event finished working, but result is unsuccsessfull define('erFATAL', -2); // event experienced FATAL error - no hooks should continue! define('erPERM_FAIL', -3); // event failed on internal permission checking (user has not permission) + define('erSTOP', -4); // event requested to stop processing (don't parse templates) // permission types define('ptCATEGORY', 0); Index: branches/unlabeled/unlabeled-1.82.2/core/kernel/db/db_event_handler.php =================================================================== diff -u -r7666 -r7754 --- branches/unlabeled/unlabeled-1.82.2/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 7666) +++ branches/unlabeled/unlabeled-1.82.2/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 7754) @@ -122,6 +122,7 @@ 'OnExport' => Array('self' => 'view|advanced:export'), 'OnExportBegin' => Array('self' => 'view|advanced:export'), + 'OnExportProgress' => Array('self' => 'view|advanced:export'), // theese event do not harm, but just in case check them too :) @@ -2005,7 +2006,7 @@ list($id,$field_values) = each($items_info); $preset_key = $field_values['ExportPresets']; - $user =& $this->Application->recallObject('u'); + $user =& $this->Application->recallObject('u.current'); $export_settings = $user->getPersistantVar('export_settings'); if (!$export_settings) return ; $export_settings = unserialize($export_settings); Index: branches/unlabeled/unlabeled-1.23.2/core/units/general/cat_dbitem_export.php =================================================================== diff -u -r7645 -r7754 --- branches/unlabeled/unlabeled-1.23.2/core/units/general/cat_dbitem_export.php (.../cat_dbitem_export.php) (revision 7645) +++ branches/unlabeled/unlabeled-1.23.2/core/units/general/cat_dbitem_export.php (.../cat_dbitem_export.php) (revision 7754) @@ -1194,7 +1194,7 @@ $object =& $event->getObject( Array('skip_autoload' => true) ); $options = $object->GetFieldOptions('ExportPresets'); - $user =& $this->Application->recallObject('u'); + $user =& $this->Application->recallObject('u.current'); $export_settings = $user->getPersistantVar('export_settings'); if (!$export_settings) return ; $export_settings = unserialize($export_settings); @@ -1314,7 +1314,7 @@ { if ($object->GetDBField('ExportSavePreset')) { $name = $object->GetDBField('ExportPresetName'); - $user =& $this->Application->recallObject('u'); + $user =& $this->Application->recallObject('u.current'); $export_settings = $user->getPersistantVar('export_settings'); $export_settings = $export_settings ? unserialize($export_settings) : array(); $export_settings[$event->Prefix][$name] = $field_values; Index: branches/unlabeled/unlabeled-1.41.2/core/kernel/event_manager.php =================================================================== diff -u -r7653 -r7754 --- branches/unlabeled/unlabeled-1.41.2/core/kernel/event_manager.php (.../event_manager.php) (revision 7653) +++ branches/unlabeled/unlabeled-1.41.2/core/kernel/event_manager.php (.../event_manager.php) (revision 7754) @@ -283,7 +283,14 @@ $this->HandleEvent($event); } + if ($event->status == erSTOP) { + // event requested to stop processing at this point + $this->Application->Session->SaveData(); + exit; + } + if ($event->status == erPERM_FAIL) { + // should do redirect but to no_permissions template $event->redirect = $this->Application->IsAdmin() ? 'no_permission' : $this->Application->ConfigValue('NoPermissionTemplate'); $event->redirect_params['pass'] = 'm'; $event->redirect_params['m_cat_id'] = 0; @@ -294,8 +301,7 @@ // don't save last_template, because no_permission template does js history.back and could cause invalid opener_stack content $this->Application->SetVar('skip_last_template', 1); } - - // should do redirect but to no_permissions template + if ( ($event->status == erSUCCESS || $event->status == erPERM_FAIL) && ($event->redirect === true || strlen($event->redirect) > 0)) { // we need to pass category if the action was submitted to self-template, with the category passed // and it has not explicly set redirect template or pass_cateogry param Index: branches/unlabeled/unlabeled-1.69.2/core/units/general/cat_event_handler.php =================================================================== diff -u -r7738 -r7754 --- branches/unlabeled/unlabeled-1.69.2/core/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 7738) +++ branches/unlabeled/unlabeled-1.69.2/core/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 7754) @@ -1366,6 +1366,39 @@ } /** + * Performs each export step & displays progress percent + * + * @param kEvent $event + */ + function OnExportProgress(&$event) + { + $export_object =& $this->Application->recallObject('CatItemExportHelper'); + /* @var $export_object kCatDBItemExportHelper */ + + $event = new kEvent($event->getPrefixSpecial().':OnDummy'); + + $action_method = 'perform'.ucfirst($event->Special); + $field_values = $export_object->$action_method($event); + + // finish code is done from JS now + if ($field_values['start_from'] == $field_values['total_records']) { + if ($event->Special == 'import') { + $this->Application->StoreVar('PermCache_UpdateRequired', 1); + $this->Application->Redirect('in-portal/categories/cache_updater', Array('m_opener' => 'r', 'pass' => 'm', 'continue' => 1, 'no_amp' => 1)); + } + elseif ($event->Special == 'export') { + $template = $this->Application->getUnitOption($event->Prefix, 'ModuleFolder').'/'.$event->Special.'_finish'; + $this->Application->Redirect($template, Array('pass' => 'all')); + } + } + + $export_options = $export_object->loadOptions($event); + echo $export_options['start_from'] * 100 / $export_options['total_records']; + + $event->status = erSTOP; + } + + /** * Returns specific to each item type columns only * * @param kEvent $event