diff --git a/addressbook/js/app.ts b/addressbook/js/app.ts index 43f505ef0b..a0c0e9aa88 100644 --- a/addressbook/js/app.ts +++ b/addressbook/js/app.ts @@ -1119,21 +1119,20 @@ class AddressbookApp extends EgwApp * @param {egwAction} action - The document they clicked * @param {egwActionObject[]} selected - Rows selected */ - merge_mail(action, selected, target) + _mergeEmail(action, data) { // Special processing for email documents - ask about infolog - if(action && action.data && selected.length > 1) + if(action && data && (data.id.length > 1 || data.select_all)) { - var callback = function(button, value) { + const callback = (button, value) => + { if(button == Et2Dialog.OK_BUTTON) { - var _action_data = jQuery.extend(true, {}, action.data); if(value.infolog) { - _action_data.menuaction += '&to_app=infolog&info_type=' + value.info_type; - action.data = _action_data; + data.menuaction += '&to_app=infolog&info_type=' + value.info_type; } - nm_action(action, selected, target); + return super._mergeEmail(action, data); } }; let dialog = new Et2Dialog(this.egw); @@ -1150,7 +1149,7 @@ class AddressbookApp extends EgwApp else { // Normal processing for only one contact selected - return nm_action(action, selected, target); + return super._mergeEmail(action, data); } } diff --git a/api/js/jsapi/egw_app.ts b/api/js/jsapi/egw_app.ts index 8124f6bee6..6a763a1ee9 100644 --- a/api/js/jsapi/egw_app.ts +++ b/api/js/jsapi/egw_app.ts @@ -23,6 +23,7 @@ import {Et2Favorites} from "../etemplate/Et2Favorites/Et2Favorites"; import {loadWebComponent} from "../etemplate/Et2Widget/Et2Widget"; import {Et2VfsSelectDialog} from "../etemplate/Et2Vfs/Et2VfsSelectDialog"; import {Et2Checkbox} from "../etemplate/Et2Checkbox/Et2Checkbox"; +import type {EgwAction} from "../egw_action/EgwAction"; /** * Type for push-message @@ -823,7 +824,7 @@ export abstract class EgwApp let split = _selected[i].id.split("::"); ids.push(split[1]); } - let document = await this._getMergeDocument(); + let document = await this._getMergeDocument(nm?.getInstanceManager(), _action); if(!document.document) { return; @@ -844,7 +845,7 @@ export abstract class EgwApp { vars.id = JSON.stringify(ids); } - egw.open_link(egw.link('/index.php', vars), '_blank'); + this.egw.open_link(this.egw.link('/index.php', vars), '_blank'); } /** @@ -854,8 +855,13 @@ export abstract class EgwApp * @protected */ - protected _getMergeDocument() : Promise<{ document : string, pdf : boolean, mime : string }> + protected _getMergeDocument(et2?, action? : EgwAction) : Promise<{ + document : string, + pdf : boolean, + mime : string + }> { + let path = action?.data?.merge_data?.directory ?? ""; let dirPref = this.egw.preference('document_dir', this.appname) ?? ""; let dirs = dirPref.split('/[,\s]+\//'); dirs.forEach((d, index) => @@ -869,9 +875,13 @@ export abstract class EgwApp class: "egw_app_merge_document", title: this.egw.lang("Insert in document"), mode: "open", - path: dirs.pop() ?? "", + path: path ?? dirs?.pop() ?? "", open: true - }, this.et2); + }, et2.widgetContainer); + if(!et2) + { + document.body.append(fileSelect); + } let pdf = loadWebComponent("et2-checkbox", { slot: "footer", label: "As PDF" @@ -894,7 +904,7 @@ export abstract class EgwApp { if(!values[0]) { - return {}; + return {document: '', pdf: false, mime: ""}; } const value = values[1].pop() ?? ""; diff --git a/api/src/Storage/Merge.php b/api/src/Storage/Merge.php index 410157cf00..e91a0c02ac 100644 --- a/api/src/Storage/Merge.php +++ b/api/src/Storage/Merge.php @@ -2410,7 +2410,16 @@ abstract class Merge public static function document_action($dirs, $group = 0, $caption = 'Insert in document', $prefix = 'document_', $default_doc = '', $export_limit = null) { - $documents = array(); + if(count($dirs = preg_split('/[,\s]+\//', $dirs)) > 1) + { + foreach($dirs as $n => &$d) + { + if($n) + { + $d = '/' . $d; + } // re-adding trailing slash removed by split + } + } if($export_limit == null) { $export_limit = self::getExportLimit(); @@ -2426,7 +2435,8 @@ abstract class Merge 'group' => $group, 'merge_data' => array( 'menuaction' => $GLOBALS['egw_info']['flags']['currentapp'] . '.' . get_called_class() . '.merge_entries', - 'merge' => get_called_class() + 'merge' => get_called_class(), + 'directory' => $dirs[0] ?? "" ) ); }