Page Menu
Home
In-Portal Phabricator
Search
Configure Global Search
Log In
Files
F803928
D420.id1042.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
Wed, Feb 26, 9:01 AM
Size
9 KB
Mime Type
text/x-diff
Expires
Thu, Feb 27, 9:01 AM (5 h, 5 m)
Engine
blob
Format
Raw Data
Handle
576648
Attached To
D420: INP-1817 - Change engine for storing export user presets
D420.id1042.diff
View Options
Index: core/install/install_schema.sql
===================================================================
--- core/install/install_schema.sql
+++ core/install/install_schema.sql
@@ -1430,3 +1430,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: 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
@@ -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: core/install/upgrades.sql
===================================================================
--- core/install/upgrades.sql
+++ core/install/upgrades.sql
@@ -2956,3 +2956,11 @@
# ===== v 5.2.2-B3 =====
INSERT INTO SearchConfig VALUES ('Categories', 'PageContent', 1, 1, 'lu_fielddesc_category_PageContent', 'lc_field_PageContent', 'In-Portal', 'la_text_category', 22, DEFAULT, 1, 'text', 'MULTI:PageRevisions.PageContent', '{ForeignTable}.PageId = {LocalTable}.CategoryId AND {ForeignTable}.RevisionNumber = {LocalTable}.LiveRevisionNumber', NULL, NULL, NULL, NULL, NULL);
ALTER TABLE Semaphores CHANGE MainIDs MainIDs TEXT NULL;
+
+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: 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'),
@@ -3080,38 +3081,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: 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
@@ -97,27 +97,33 @@
<script type="text/javascript" src="incs/ajax.js"></script>
<script type="text/javascript">
- var delete_busy = false;
-
function delete_preset()
{
+ var presets = document.getElementById('<inp2:ord.export_InputName field="ExportPresets"/>'),
+ delete_preset_name = presets.options[presets.selectedIndex].text;
+
+ if ( delete_preset_name === '' ) {
+ return;
+ }
+
if (!confirm('<inp2:m_Phrase label="la_ConfirmDeleteExportPreset" js_escape="1"/>')) return;
- var $kf = document.getElementById('kernel_form');
- tmp = $kf.elements['events[ord.export]'].value;
- $kf.elements['events[ord.export]'].value = 'OnDeleteExportPreset';
- Request.method = 'POST';
- Request.params = Request.serializeForm($kf);
- $kf.elements['events[ord.export]'].value = tmp;
- Request.makeRequest('<inp2:m_t ajax="1" ord.export_event="OnDeleteExportPreset" no_amp="1" js_escape="1"/>', delete_busy, '', function() {
- presets = document.getElementById('<inp2:ord.export_InputName field="ExportPresets"/>');
- for (i=0; i< presets.options.length; i++) {
- if (presets.options[i].selected) {
- presets.options.remove[i];
+ $.post(
+ '<inp2:m_Link template="index" no_amp="1" js_escape="1"/>',
+ {
+ 'events[ord.export]': 'OnDeleteExportPreset',
+ delete_preset_name: delete_preset_name
+ },
+ function () {
+ for ( var i = 0; i < presets.options.length; i++ ) {
+ if ( presets.options[i].selected ) {
+ presets.options[i].remove();
+ }
}
+
+ presets.options[0].selected = true;
}
- presets.options[0].selected = true;
- }, function() {alert('error')} );
+ );
}
function update_preset_field(status)
@@ -168,4 +174,4 @@
</script>
-<inp2:m_include t="incs/footer"/>
\ No newline at end of file
+<inp2:m_include t="incs/footer"/>
Event Timeline
Log In to Comment