Index: branches/5.2.x/core/install/install_schema.sql =================================================================== --- branches/5.2.x/core/install/install_schema.sql +++ branches/5.2.x/core/install/install_schema.sql @@ -1439,3 +1439,11 @@ TransitionEffectCustom varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (PromoBlockGroupId) ); + +CREATE TABLE ExportUserPresets ( + PortalUserId int NOT NULL DEFAULT 0, + ItemPrefix varchar(100) NOT NULL DEFAULT '', + PresetName varchar(100) NOT NULL DEFAULT '', + PresetData text NULL DEFAULT NULL, + PRIMARY KEY (PortalUserId, ItemPrefix, PresetName) +); Index: branches/5.2.x/core/install/remove_schema.sql =================================================================== --- branches/5.2.x/core/install/remove_schema.sql +++ branches/5.2.x/core/install/remove_schema.sql @@ -77,3 +77,4 @@ DROP TABLE CurlLog; DROP TABLE PromoBlocks; DROP TABLE PromoBlockGroups; +DROP TABLE ExportUserPresets; Index: branches/5.2.x/core/install/upgrades.php =================================================================== --- branches/5.2.x/core/install/upgrades.php +++ branches/5.2.x/core/install/upgrades.php @@ -2367,6 +2367,10 @@ */ public function Upgrade_5_2_2_B3($mode) { + if ( $mode === 'after' ) { + $this->migrateExportUserPresets(); + } + if ( $mode != 'before' ) { return; } @@ -2411,4 +2415,43 @@ } } } + + /** + * Transforms "export_settings" persistent session variable into "ExportUserPresets" database table. + * + * @return void + */ + protected function migrateExportUserPresets() + { + $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); + } + } Index: branches/5.2.x/core/install/upgrades.sql =================================================================== --- branches/5.2.x/core/install/upgrades.sql +++ branches/5.2.x/core/install/upgrades.sql @@ -2972,3 +2972,11 @@ ADD COLUMN `RequestURI` varchar(255) NOT NULL DEFAULT '', ADD COLUMN `Backtrace` longtext NULL; INSERT INTO SystemSettings VALUES(DEFAULT, 'SemaphoreLifetimeInSeconds', '300', 'In-Portal', 'in-portal:configure_advanced', 'la_section_SettingsSystem', 'la_config_SemaphoreLifetimeInSeconds', 'text', '', 'style=\"width: 50px;\"', 60.1, 0, 1, 'hint:la_config_SemaphoreLifetimeInSeconds'); + +CREATE TABLE ExportUserPresets ( + PortalUserId int NOT NULL DEFAULT 0, + ItemPrefix varchar(100) NOT NULL DEFAULT '', + PresetName varchar(100) NOT NULL DEFAULT '', + PresetData text NULL DEFAULT NULL, + PRIMARY KEY (PortalUserId, ItemPrefix, PresetName) +); Index: branches/5.2.x/core/kernel/db/db_event_handler.php =================================================================== --- branches/5.2.x/core/kernel/db/db_event_handler.php +++ branches/5.2.x/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'), @@ -3082,38 +3083,22 @@ */ protected function OnDeleteExportPreset(kEvent $event) { - $field_values = $this->getSubmittedFields($event); - - if ( !$field_values ) { - return ; - } - - $preset_key = $field_values['ExportPresets']; - $export_settings = $this->Application->RecallPersistentVar('export_settings'); + $delete_preset_name = $this->Application->GetVar('delete_preset_name'); - if ( !$export_settings ) { - return ; - } - - $export_settings = unserialize($export_settings); - - if ( !isset($export_settings[$event->Prefix]) ) { - return ; + if ( !$delete_preset_name ) { + 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($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: branches/5.2.x/core/units/helpers/cat_dbitem_export_helper.php =================================================================== --- branches/5.2.x/core/units/helpers/cat_dbitem_export_helper.php +++ branches/5.2.x/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');