feature to allow copying mails to other folders, (configure via prefs -> ask for cofirmation before moving selected messages), using DIALOG BOXES by Michael Leigeber;

This commit is contained in:
Klaus Leithoff 2010-05-03 14:24:07 +00:00
parent fbfdb38852
commit 62bc8bcb04
19 changed files with 302 additions and 29 deletions

View File

@ -665,6 +665,42 @@
}
}
/*
* copy messages to another folder
*
* @param string _folder name of the target folder
* @param array _selectedMessages UID's of the messages to copy
*
* @return xajax response
*/
function copyMessages($_folderName, $_selectedMessages)
{
if($this->_debug) error_log(__METHOD__." called with Messages ".print_r($_selectedMessages,true));
$messageCount = 0;
if(is_array($_selectedMessages) && count($_selectedMessages['msg']) > 0) $messageCount = count($_selectedMessages['msg']);
$folderName = $this->_decodeEntityFolderName($_folderName);
if ($_selectedMessages == 'all' || !empty( $_selectedMessages['msg']) && !empty($folderName)) {
if ($this->sessionData['mailbox'] != $folderName)
{
$deleteAfterMove = false;
$this->bofelamimail->moveMessages($folderName, ($_selectedMessages == 'all'? null:$_selectedMessages['msg']),$deleteAfterMove);
}
else
{
if($this->_debug) error_log("ajaxfelamimail::copyMessages-> same folder than current selected");
}
return $this->generateMessageList($this->sessionData['mailbox'],($_selectedMessages == 'all'?0:(-1*$messageCount)));
} else {
$response = new xajaxResponse();
$response->addScript('resetMessageSelect();');
$response->addScript('tellUser("'.lang('No messages selected, or lost selection. Changing to folder ').'","'.$_folderName.'");');
$response->addScript('onNodeSelect("'.$_folderName.'");');
return $response->getXML();
}
}
function quickSearch($_searchType, $_searchString, $_status)
{
// save the filter

View File

@ -2501,7 +2501,7 @@
}
}
function moveMessages($_foldername, $_messageUID)
function moveMessages($_foldername, $_messageUID, $deleteAfterMove=true)
{
$msglist = '';
@ -2511,15 +2511,19 @@
return false;
}
// mark messages as deleted
if ( PEAR::isError($this->icServer->deleteMessages($_messageUID, true))) {
return false;
}
if ($deleteAfterMove === true)
{
if ( PEAR::isError($this->icServer->deleteMessages($_messageUID, true)))
{
return false;
}
if($deleteOptions != "mark_as_deleted") {
// delete the messages finaly
$this->icServer->expunge();
if($deleteOptions != "mark_as_deleted")
{
// delete the messages finaly
$this->icServer->expunge();
}
}
return true;
}

View File

@ -83,6 +83,7 @@ class felamimail_hooks
'0' => lang('no'),
'1' => lang('yes')
);
$no_yes_copy = array_merge($no_yes,array('2'=>lang('yes, offer copy option')));
$prefAllowManageFolders = $no_yes;
@ -102,10 +103,9 @@ class felamimail_hooks
'6' => lang('size(...->0)')
);
$selectOptions = array(
'0' => lang('no'),
'1' => lang('yes'),
'2' => lang('yes') . ' - ' . lang('small view')
$selectOptions = array_merge(
$no_yes,
array('2' => lang('yes') . ' - ' . lang('small view'))
);
$newWindowOptions = array(
@ -184,7 +184,7 @@ class felamimail_hooks
'type' => 'select',
'label' => 'Do you want to be asked for confirmation before moving selected messages to another folder?',
'name' => 'prefaskformove',
'values' => $no_yes,
'values' => $no_yes_copy,
'xmlrpc' => True,
'admin' => False,
'forced' => '1',

View File

@ -620,6 +620,7 @@
$this->t->set_var('refreshTime',$refreshTime*60*1000);
// other settings
$prefaskformove = intval($userPreferences['prefaskformove']) ? intval($userPreferences['prefaskformove']) : 0;
$this->t->set_var('prefaskformove',$prefaskformove);
#// set the url to open when refreshing
#$linkData = array
@ -974,7 +975,12 @@
$this->t->set_var('lang_open_all',lang("open all"));
$this->t->set_var('lang_close_all',lang("close all"));
$this->t->set_var('lang_moving_messages_to',lang('moving messages to'));
$this->t->set_var('lang_askformove',lang('Do you really want to move the selected messages to folder:'));
$this->t->set_var('lang_copying_messages_to',lang('copying messages to'));
$this->t->set_var('lang_MoveCopyTitle',($GLOBALS['egw_info']['user']['preferences']['felamimail']['prefaskformove']==2?lang('Copy or Move Messages?'):lang('Move Messages?')));
$this->t->set_var('lang_askformove',($GLOBALS['egw_info']['user']['preferences']['felamimail']['prefaskformove']==2?lang('Do you really want to move or copy the selected messages to folder:'):lang('Do you really want to move the selected messages to folder:')));
$this->t->set_var('lang_move',lang("Move"));
$this->t->set_var('lang_copy',lang("Copy"));
$this->t->set_var('lang_cancel',lang("Cancel"));
$this->t->set_var('lang_mark_all_messages',lang('all messages in folder'));
$this->t->set_var('lang_confirm_all_messages',lang('The action will be applied to all messages of the current folder.\nDo you want to proceed?'));
$this->t->set_var('lang_empty_trash',lang('empty trash'));

View File

@ -121,12 +121,53 @@ function OnLoadingStart(_nodeID) {
// alert(_nodeID);
//}
function callNodeSelect(_nodeIDfc, mode) {
//alert("callNodeSelect:"+_nodeIDfc);
var buff = prefAskForMove;
if (mode == 0) // cancel
{
prefAskForMove = 0;
CopyOrMove = false;
onNodeSelect(_nodeIDfc);
}
if (mode == 1) // move
{
prefAskForMove = 0;
CopyOrMove = true;
onNodeSelect(_nodeIDfc);
}
if (mode == 2) // copy
{
prefAskForMove = 99;
CopyOrMove = true;
onNodeSelect(_nodeIDfc);
}
prefAskForMove = buff;
CopyOrMove = true;
return true;
}
function onNodeSelect(_nodeID) {
//alert(_nodeID)
var Check = true;
//alert("onNodeSelect:"+_nodeID);
var Check = CopyOrMove;
var actionPending = false;
if(tree.getUserData(_nodeID, 'folderName')) {
if(document.getElementsByName("folderAction")[0].value == "moveMessage") {
if (prefAskForMove == 1) Check = confirm(lang_askformove + tree.getUserData(_nodeID, 'folderName'));
if (prefAskForMove == 1 || prefAskForMove == 2)
{
//Check = confirm(lang_askformove + tree.getUserData(_nodeID, 'folderName'));
title = lang_MoveCopyTitle;
message = lang_askformove + tree.getUserData(_nodeID, 'folderName');
message = message + "<p><button onclick=\"callNodeSelect('"+_nodeID+"', 1);hideDialog();\">"+lang_move+"</button>";
if (prefAskForMove == 2) message = message + "&nbsp;<button onclick=\"callNodeSelect('"+_nodeID+"', 2);hideDialog();\">"+lang_copy+"</button>";
message = message + "&nbsp;<button onclick=\"callNodeSelect('"+_nodeID+"', 0);hideDialog();\">"+lang_cancel+"</button>";
type = 'prompt';
autohide = 0;
showDialog(title,message,type,autohide);
Check = false;
actionPending = true;
}
if (prefAskForMove==99) actionPending = 'copy';
if (Check == true && document.getElementById('selectAllMessagesCheckBox').checked == true) Check = confirm(lang_confirm_all_messages);
if (Check == true)
{
@ -138,14 +179,27 @@ function onNodeSelect(_nodeID) {
resetMessageSelect();
formData = xajax.getFormValues('formMessageList');
}
setStatusMessage(movingMessages +' <span style="font-weight: bold;">'+ tree.getUserData(_nodeID, 'folderName') +'</span>');
document.getElementById('divMessageList').innerHTML = '';
xajax_doXMLHTTP("felamimail.ajaxfelamimail.moveMessages", _nodeID, formData);
if (actionPending == 'copy')
{
setStatusMessage(copyingMessages +' <span style="font-weight: bold;">'+ tree.getUserData(_nodeID, 'folderName') +'</span>');
document.getElementById('divMessageList').innerHTML = '';
xajax_doXMLHTTP("felamimail.ajaxfelamimail.copyMessages", _nodeID, formData);
}
else
{
// default: move messages
setStatusMessage(movingMessages +' <span style="font-weight: bold;">'+ tree.getUserData(_nodeID, 'folderName') +'</span>');
document.getElementById('divMessageList').innerHTML = '';
xajax_doXMLHTTP("felamimail.ajaxfelamimail.moveMessages", _nodeID, formData);
}
} else {
resetMessageSelect();
for(i=0; i< document.forms.formMessageList.elements.length; i++) {
if(document.forms.formMessageList.elements[i].checked) {
document.forms.formMessageList.elements[i].checked = false;
if (actionPending == false)
{
resetMessageSelect();
for(i=0; i< document.forms.formMessageList.elements.length; i++) {
if(document.forms.formMessageList.elements[i].checked) {
document.forms.formMessageList.elements[i].checked = false;
}
}
}
}
@ -157,6 +211,7 @@ function onNodeSelect(_nodeID) {
refreshFolderStatus(_nodeID);
}
}
CopyOrMove = true;
}
function quickSearch() {
@ -479,3 +534,131 @@ function changeActiveAccount(_accountSelection)
xajax_doXMLHTTP('felamimail.ajaxfelamimail.changeActiveAccount',_accountSelection.value);
}
// DIALOG BOXES by Michael Leigeber
// global variables //
var TIMER = 5;
var SPEED = 10;
var WRAPPER = 'divPoweredBy';
// calculate the current window width //
function pageWidth() {
return window.innerWidth != null ? window.innerWidth : document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body != null ? document.body.clientWidth : null;
}
// calculate the current window height //
function pageHeight() {
return window.innerHeight != null? window.innerHeight : document.documentElement && document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body != null? document.body.clientHeight : null;
}
// calculate the current window vertical offset //
function topPosition() {
return typeof window.pageYOffset != 'undefined' ? window.pageYOffset : document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ? document.body.scrollTop : 0;
}
// calculate the position starting at the left of the window //
function leftPosition() {
return typeof window.pageXOffset != 'undefined' ? window.pageXOffset : document.documentElement && document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ? document.body.scrollLeft : 0;
}
// build/show the dialog box, populate the data and call the fadeDialog function //
function showDialog(title,message,type,autohide) {
if(!type) {
type = 'error';
}
var dialog;
var dialogheader;
var dialogclose;
var dialogtitle;
var dialogcontent;
var dialogmask;
if(!document.getElementById('dialog')) {
dialog = document.createElement('div');
dialog.id = 'dialog';
dialogheader = document.createElement('div');
dialogheader.id = 'dialog-header';
dialogtitle = document.createElement('div');
dialogtitle.id = 'dialog-title';
dialogclose = document.createElement('div');
dialogclose.id = 'dialog-close'
dialogcontent = document.createElement('div');
dialogcontent.id = 'dialog-content';
dialogmask = document.createElement('div');
dialogmask.id = 'dialog-mask';
document.body.appendChild(dialogmask);
document.body.appendChild(dialog);
dialog.appendChild(dialogheader);
dialogheader.appendChild(dialogtitle);
dialogheader.appendChild(dialogclose);
dialog.appendChild(dialogcontent);;
dialogclose.setAttribute('onclick','hideDialog()');
dialogclose.onclick = hideDialog;
} else {
dialog = document.getElementById('dialog');
dialogheader = document.getElementById('dialog-header');
dialogtitle = document.getElementById('dialog-title');
dialogclose = document.getElementById('dialog-close');
dialogcontent = document.getElementById('dialog-content');
dialogmask = document.getElementById('dialog-mask');
dialogmask.style.visibility = "visible";
dialog.style.visibility = "visible";
}
dialog.style.opacity = .00;
dialog.style.filter = 'alpha(opacity=0)';
dialog.alpha = 0;
var width = pageWidth();
var height = pageHeight();
var left = leftPosition();
var top = topPosition();
var dialogwidth = dialog.offsetWidth;
var dialogheight = dialog.offsetHeight;
var topposition = top + (height / 3) - (dialogheight / 2);
var leftposition = left + (width / 2) - (dialogwidth / 2);
dialog.style.top = topposition + "px";
dialog.style.left = leftposition + "px";
dialogheader.className = type + "header";
dialogtitle.innerHTML = title;
dialogcontent.className = type;
dialogcontent.innerHTML = message;
var content = document.getElementById(WRAPPER);
dialogmask.style.height = content.offsetHeight + 'px';
dialog.timer = setInterval("fadeDialog(1)", TIMER);
if(autohide) {
dialogclose.style.visibility = "hidden";
window.setTimeout("hideDialog()", (autohide * 1000));
} else {
dialogclose.style.visibility = "visible";
}
}
// hide the dialog box //
function hideDialog() {
var dialog = document.getElementById('dialog');
clearInterval(dialog.timer);
dialog.timer = setInterval("fadeDialog(0)", TIMER);
}
// fade-in the dialog box //
function fadeDialog(flag) {
if(flag == null) {
flag = 1;
}
var dialog = document.getElementById('dialog');
var value;
if(flag == 1) {
value = dialog.alpha + SPEED;
} else {
value = dialog.alpha - SPEED;
}
dialog.alpha = value;
dialog.style.opacity = (value / 100);
dialog.style.filter = 'alpha(opacity=' + value + ')';
if(value >= 99) {
clearInterval(dialog.timer);
dialog.timer = null;
} else if(value <= 1) {
dialog.style.visibility = "hidden";
document.getElementById('dialog-mask').style.visibility = "hidden";
clearInterval(dialog.timer);
}
}

View File

@ -486,4 +486,21 @@ DIV.divButton {
border-top: 1px solid silver;
overflow:auto;
}
/*
* new dialog style definitions
*/
#contentdialog {padding:20px}
#dialog {position:absolute; width:425px; padding:10px; z-index:200; background:#fff}
#dialog-header {display:block; position:relative; width:411px; padding:3px 6px 7px; height:14px; font-size:14px; font-weight:bold}
#dialog-title {float:left}
#dialog-close {float:right; cursor:pointer; margin:3px 3px 0 0; height:11px; width:11px; background:url(images/dialog_close.gif) no-repeat}
#dialog-content {display:block; height:160px; padding:6px; color:#666666; font-size:13px}
#dialog-mask {position:absolute; top:0; left:0; min-height:100%; width:100%; background:#FFF; opacity:.75; filter:alpha(opacity=75); z-index:100}
.error {background:#fff url(images/error_bg.jpg) bottom right no-repeat; border:1px solid #924949; border-top:none}
.errorheader {background:url(images/error_header.gif) repeat-x; color:#6f2c2c; border:1px solid #924949; border-bottom:none}
.warning {background:#fff url(images/warning_bg.jpg) bottom right no-repeat; border:1px solid #c5a524; border-top:none}
.warningheader {background:url(images/warning_header.gif) repeat-x; color:#957c17; border:1px solid #c5a524; border-bottom:none}
.success {background:#fff url(images/success_bg.jpg) bottom right no-repeat; border:1px solid #60a174; border-top:none}
.successheader {background:url(images/success_header.gif) repeat-x; color:#3c7f51; border:1px solid #60a174; border-bottom:none}
.prompt {background:#fff url(images/prompt_bg.jpg) bottom right no-repeat; border:1px solid #4f6d81; border-top:none}
.promptheader {background:url(images/prompt_header.gif) repeat-x; color:#355468; border:1px solid #4f6d81; border-bottom:none}

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 B

View File

@ -5,8 +5,14 @@ var sURL = unescape(window.location.pathname);
// some translations needed for javascript functions
var movingMessages = '{lang_moving_messages_to}';
var copyingMessages = '{lang_copying_messages_to}';
var lang_askformove = '{lang_askformove}';
var prefAskForMove = '{prefaskformove}';
var CopyOrMove = true;
var lang_MoveCopyTitle = '{lang_MoveCopyTitle}';
var lang_copy = '{lang_copy}';
var lang_move = '{lang_move}';
var lang_cancel = '{lang_cancel}';
var lang_emptyTrashFolder = '{lang_empty_trash}';
var lang_compressingFolder = '{lang_compress_folder}';
@ -47,7 +53,6 @@ fm_startTimerFolderStatusUpdate(refreshTimeOut);
fm_startTimerMessageListUpdate(refreshTimeOut);
</script>
<TABLE WIDTH="100%" CELLPADDING="0" CELLSPACING="0" style="border: solid #aaaaaa 1px; border-right: solid black 1px; ">
<tr class="navbarBackground">
<td align="left" width="180px">
@ -127,7 +132,6 @@ fm_startTimerMessageListUpdate(refreshTimeOut);
</TD>
</TR>
</table>
<!-- END main -->
<!-- BEGIN message_table -->
@ -139,6 +143,7 @@ fm_startTimerMessageListUpdate(refreshTimeOut);
<span id="spanMessagePreview">
{IFrameForPreview}
</span>
<!-- END message_table -->
<!-- BEGIN status_row_tpl -->

View File

@ -529,4 +529,21 @@ DIV.divButton {
border-top: 1px solid silver;
overflow:auto;
}
/*
* new dialog style definitions
*/
#contentdialog {padding:20px}
#dialog {position:absolute; width:425px; padding:10px; z-index:200; background:#fff}
#dialog-header {display:block; position:relative; width:411px; padding:3px 6px 7px; height:14px; font-size:14px; font-weight:bold}
#dialog-title {float:left}
#dialog-close {float:right; cursor:pointer; margin:3px 3px 0 0; height:11px; width:11px; background:url(images/dialog_close.gif) no-repeat}
#dialog-content {display:block; height:160px; padding:6px; color:#666666; font-size:13px}
#dialog-mask {position:absolute; top:0; left:0; min-height:100%; width:100%; background:#FFF; opacity:.75; filter:alpha(opacity=75); z-index:100}
.error {background:#fff url(../default/images/error_bg.jpg) bottom right no-repeat; border:1px solid #924949; border-top:none}
.errorheader {background:url(../default/images/error_header.gif) repeat-x; color:#6f2c2c; border:1px solid #924949; border-bottom:none}
.warning {background:#fff url(../default/images/warning_bg.jpg) bottom right no-repeat; border:1px solid #c5a524; border-top:none}
.warningheader {background:url(../default/images/warning_header.gif) repeat-x; color:#957c17; border:1px solid #c5a524; border-bottom:none}
.success {background:#fff url(../default/images/success_bg.jpg) bottom right no-repeat; border:1px solid #60a174; border-top:none}
.successheader {background:url(../default/images/success_header.gif) repeat-x; color:#3c7f51; border:1px solid #60a174; border-bottom:none}
.prompt {background:#fff url(../default/images/prompt_bg.jpg) bottom right no-repeat; border:1px solid #4f6d81; border-top:none}
.promptheader {background:url(../default/images/prompt_header.gif) repeat-x; color:#355468; border:1px solid #4f6d81; border-bottom:none}

View File

@ -5,8 +5,14 @@ var sURL = unescape(window.location.pathname);
// some translations needed for javascript functions
var movingMessages = '{lang_moving_messages_to}';
var copyingMessages = '{lang_copying_messages_to}';
var lang_askformove = '{lang_askformove}';
var prefAskForMove = '{prefaskformove}';
var CopyOrMove = true;
var lang_MoveCopyTitle = '{lang_MoveCopyTitle}';
var lang_copy = '{lang_copy}';
var lang_move = '{lang_move}';
var lang_cancel = '{lang_cancel}';
var lang_emptyTrashFolder = '{lang_empty_trash}';
var lang_compressingFolder = '{lang_compress_folder}';
@ -131,7 +137,6 @@ fm_startTimerMessageListUpdate(refreshTimeOut);
</TR>
</table>
<!-- END main -->
<!-- BEGIN message_table -->