Added a checkbox for 'save as infolog' when merging multiple contacts into an email document.

This commit is contained in:
nathangray 2017-01-19 09:36:38 -07:00
parent be68b38982
commit 845a1ec3e7
5 changed files with 118 additions and 0 deletions

View File

@ -815,6 +815,46 @@ app.classes.addressbook = AppJS.extend(
return false;
},
/**
* Merge the selected contacts into the target document.
*
* Normally we let the framework handle this, but in addressbook we want to
* interfere and customize things a little to ask about saving to infolog.
*
* @param {egwAction} action - The document they clicked
* @param {egwActionObject[]} selected - Rows selected
*/
merge_mail: function merge_mail(action, selected, target)
{
// Special processing for email documents - ask about infolog
if(action && action.data && selected.length > 1)
{
var callback = function(button, value) {
if(button == et2_dialog.OK_BUTTON)
{
var _action = jQuery.extend(true, {}, action);
if(value.infolog)
{
_action.data.menuaction += '&to_app=infolog';
}
nm_action(_action, selected, target);
}
};
et2_createWidget("dialog",{
callback: callback,
title: action.caption,
buttons: et2_dialog.BUTTONS_OK_CANCEL,
type: et2_dialog.QUESTION_MESSAGE,
template: egw.webserverUrl+'/addressbook/templates/default/mail_merge_dialog.xet'
});
}
else
{
// Normal processing for only one contact selected
return nm_action(action, selected, target);
}
},
/**
* Retrieve the current state of the application for future restoration
*

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE overlay PUBLIC "-//Stylite AG//eTemplate 2//EN" "http://www.egroupware.org/etemplate2.dtd">
<!-- $Id$ -->
<overlay>
<template id="addressbook.mail_merge_dialog" template="" lang="" group="0" version="">
<grid>
<columns>
<column/>
<column/>
</columns>
<rows>
<row>
<description value="Do you want to send the message to all selected entries, WITHOUT further editing?"/>
</row>
<row>
<checkbox id="infolog" label="Save as infolog"/>
</row>
</rows>
</grid>
</template>
</overlay>

View File

@ -256,4 +256,45 @@ class Merge extends Api\Storage\Merge
$GLOBALS['egw']->framework->render(ob_get_clean());
}
/**
* Get insert-in-document action with optional default document on top
*
* Overridden from parent to change the insert-in-email actions so we can
* have a custom action handler.
*
* @param string $dirs Directory(s comma or space separated) to search
* @param int $group see nextmatch_widget::egw_actions
* @param string $caption ='Insert in document'
* @param string $prefix ='document_'
* @param string $default_doc ='' full path to default document to show on top with action == 'document'!
* @param int|string $export_limit =null export-limit, default $GLOBALS['egw_info']['server']['export_limit']
* @return array see nextmatch_widget::egw_actions
*/
public static function document_action($dirs, $group=0, $caption='Insert in document', $prefix='document_', $default_doc='',
$export_limit=null)
{
$actions = parent::document_action($dirs, $group, $caption, $prefix, $default_doc, $export_limit);
// Change merge into email actions so we can customize them
static::customise_mail_actions($actions);
return $actions;
}
protected static function customise_mail_actions(&$action)
{
if(strpos($action['egw_open'], 'edit-mail') === 0)
{
unset($action['confirm_multiple']);
$action['onExecute'] = 'javaScript:app.addressbook.merge_mail';
}
else if ($action['children'])
{
foreach($action['children'] as &$child)
{
static::customise_mail_actions($child);
}
}
}
}

View File

@ -6824,6 +6824,9 @@ class Mail
$sendOK = true;
try {
$mailObject->send();
$message_id = $mailObject->getHeader('Message-ID');
$id = $this->appendMessage($_folder, $mailObject->getRaw(), '');
$importID = $id->current();
}
catch(Exception $e) {
$sendOK = false;

View File

@ -3520,6 +3520,19 @@ class mail_compose
array((int)$contact_id, ''),
$folder,$merged_mail_id
);
// Also save as infolog
if($merged_mail_id && $_REQUEST['to_app'] && isset($GLOBALS['egw_info']['user']['apps'][$_REQUEST['to_app']]))
{
$rowid = mail_ui::generateRowID($this->mail_bo->profileID, $folder, $merged_mail_id, true);
$data = mail_integration::get_integrate_data($rowid);
if($data && $_REQUEST['to_app'] == 'infolog')
{
$bo = new infolog_bo();
$entry = $bo->import_mail($data['addresses'],$data['subject'],$data['message'],$data['attachments'],$data['date']);
$bo->write($entry);
}
}
}
catch (Exception $e)
{