Index: core/install/install_schema.sql =================================================================== --- core/install/install_schema.sql +++ core/install/install_schema.sql @@ -1430,3 +1430,13 @@ TransitionEffectCustom varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (PromoBlockGroupId) ); + +CREATE TABLE ExportUserPresets ( + Id int NOT NULL AUTO_INCREMENT, + PortalUserId int NULL DEFAULT NULL, + ItemPrefix varchar(100) NOT NULL DEFAULT '', + PresetName varchar(255) NOT NULL DEFAULT '', + PresetData text NULL DEFAULT NULL, + UNIQUE KEY General (PortalUserId, ItemPrefix, PresetName), + PRIMARY KEY (Id) +); Index: core/install/remove_schema.sql =================================================================== --- core/install/remove_schema.sql +++ core/install/remove_schema.sql @@ -77,3 +77,4 @@ DROP TABLE CurlLog; DROP TABLE PromoBlocks; DROP TABLE PromoBlockGroups; +DROP TABLE ExportUserPresets; Index: core/install/upgrades.php =================================================================== --- core/install/upgrades.php +++ core/install/upgrades.php @@ -2368,6 +2368,36 @@ public function Upgrade_5_2_2_B3($mode) { if ( $mode != 'before' ) { + $sql = 'SELECT VariableValue, PortalUserId + FROM ' . TABLE_PREFIX . 'UserPersistentSessionData + WHERE VariableName = "export_settings"'; + $variable_values = $this->Conn->GetColIterator($sql, 'PortalUserId'); + + foreach ( $variable_values as $user_id => $variable_value ) { + if ( !kUtil::IsSerialized($variable_value) ) { + continue; + } + + $variable_value = unserialize($variable_value); + + foreach ( $variable_value as $prefix => $prefix_export_settings ) { + foreach ( $prefix_export_settings as $name => $export_settings ) { + $fields_hash = array( + 'PortalUserId' => $user_id, + 'ItemPrefix' => $prefix, + 'PresetName' => $name, + 'PresetData' => json_encode($export_settings), + ); + $this->Conn->doInsert($fields_hash, TABLE_PREFIX . 'ExportUserPresets', 'REPLACE'); + } + } + } + + $sql = 'DELETE + FROM ' . TABLE_PREFIX . 'UserPersistentSessionData + WHERE VariableName = "export_settings"'; + $this->Conn->Query($sql); + return; } Index: core/kernel/db/db_event_handler.php =================================================================== --- core/kernel/db/db_event_handler.php +++ core/kernel/db/db_event_handler.php @@ -131,6 +131,7 @@ 'OnPreCreate' => Array ('self' => 'add|add.pending', 'subitem' => 'edit|edit.pending'), 'OnEdit' => Array ('self' => 'edit|edit.pending', 'subitem' => 'edit|edit.pending'), + 'OnDeleteExportPreset' => array('self' => 'view'), 'OnExport' => Array ('self' => 'view|advanced:export'), 'OnExportBegin' => Array ('self' => 'view|advanced:export'), 'OnExportProgress' => Array ('self' => 'view|advanced:export'), @@ -3086,32 +3087,16 @@ return ; } - $preset_key = $field_values['ExportPresets']; - $export_settings = $this->Application->RecallPersistentVar('export_settings'); - - if ( !$export_settings ) { - return ; - } - - $export_settings = unserialize($export_settings); - - if ( !isset($export_settings[$event->Prefix]) ) { - return ; - } - - $to_delete = ''; - - foreach ($export_settings[$event->Prefix] as $key => $val) { - if ( implode('|', $val['ExportColumns']) == $preset_key ) { - $to_delete = $key; - break; - } - } + $where_clause = array( + 'ItemPrefix = ' . $this->Conn->qstr($event->Prefix), + 'PortalUserId = ' . $this->Application->RecallVar('user_id'), + 'PresetName = ' . $this->Conn->qstr($this->Application->GetVar('delete_preset_name')), + ); - if ( $to_delete ) { - unset($export_settings[$event->Prefix][$to_delete]); - $this->Application->StorePersistentVar('export_settings', serialize($export_settings)); - } + $sql = 'DELETE + FROM ' . TABLE_PREFIX . 'ExportUserPresets + WHERE (' . implode(') AND (', $where_clause) . ')'; + $this->Conn->Query($sql); } /** Index: core/units/helpers/cat_dbitem_export_helper.php =================================================================== --- core/units/helpers/cat_dbitem_export_helper.php +++ core/units/helpers/cat_dbitem_export_helper.php @@ -1350,22 +1350,24 @@ $object = $event->getObject(Array ('skip_autoload' => true)); $options = $object->GetFieldOptions('ExportPresets'); - $export_settings = $this->Application->RecallPersistentVar('export_settings'); + $where_clause = array( + 'ItemPrefix = ' . $this->Conn->qstr($event->Prefix), + 'PortalUserId = ' . $this->Application->RecallVar('user_id'), + ); + $sql = 'SELECT PresetData, PresetName + FROM ' . TABLE_PREFIX . 'ExportUserPresets + WHERE (' . implode(') AND (', $where_clause) . ')'; + $export_settings = $this->Conn->GetCol($sql, 'PresetName'); if ( !$export_settings ) { return; } - $export_settings = unserialize($export_settings); - - if ( !isset($export_settings[$event->Prefix]) ) { - return; - } - $export_presets = array ('' => ''); - foreach ($export_settings[$event->Prefix] as $key => $val) { - $export_presets[implode('|', $val['ExportColumns'])] = $key; + foreach ( $export_settings as $name => $data ) { + $data = json_decode($data, true); + $export_presets[implode('|', $data['ExportColumns'])] = $name; } $options['options'] = $export_presets; @@ -1488,12 +1490,13 @@ if ( $this->verifyOptions($event) ) { if ( $this->_getExportSavePreset($object) ) { - $name = $object->GetDBField('ExportPresetName'); - - $export_settings = $this->Application->RecallPersistentVar('export_settings'); - $export_settings = $export_settings ? unserialize($export_settings) : array (); - $export_settings[$event->Prefix][$name] = $field_values; - $this->Application->StorePersistentVar('export_settings', serialize($export_settings)); + $fields_hash = array( + 'PortalUserId' => $this->Application->RecallVar('user_id'), + 'ItemPrefix' => $event->Prefix, + 'PresetName' => $object->GetDBField('ExportPresetName'), + 'PresetData' => json_encode($field_values), + ); + $this->Conn->doInsert($fields_hash, TABLE_PREFIX . 'ExportUserPresets', 'REPLACE'); } $progress_t = $this->Application->RecallVar('export_progress_t'); Index: modules/in-commerce/admin_templates/orders/export/export.tpl =================================================================== --- modules/in-commerce/admin_templates/orders/export/export.tpl +++ modules/in-commerce/admin_templates/orders/export/export.tpl @@ -101,8 +101,16 @@ function delete_preset() { + var presets = document.getElementById(''), + delete_preset_name = presets.options[presets.selectedIndex].text; + + if ( delete_preset_name === '' ) { + return; + } + if (!confirm('')) return; var $kf = document.getElementById('kernel_form'); + set_hidden_field('delete_preset_name', delete_preset_name); tmp = $kf.elements['events[ord.export]'].value; $kf.elements['events[ord.export]'].value = 'OnDeleteExportPreset'; Request.method = 'POST'; @@ -113,7 +121,7 @@ for (i=0; i< presets.options.length; i++) { if (presets.options[i].selected) { - presets.options.remove[i]; + presets.options[i].remove(); } } presets.options[0].selected = true; @@ -168,4 +176,4 @@ - \ No newline at end of file +