Page Menu
Home
In-Portal Phabricator
Search
Configure Global Search
Log In
Files
F802516
D420.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Mon, Feb 24, 1:25 PM
Size
7 KB
Mime Type
text/x-diff
Expires
Tue, Feb 25, 1:25 PM (12 h, 8 m)
Engine
blob
Format
Raw Data
Handle
575428
Attached To
D420: INP-1817 - Change engine for storing export user presets
D420.diff
View Options
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');
Event Timeline
Log In to Comment