Page MenuHomeIn-Portal Phabricator

D420.id1042.diff
No OneTemporary

File Metadata

Created
Wed, Feb 26, 9:01 AM

D420.id1042.diff

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