* Mail: feature to allow to void the (configured) spam/junk folder on right-click action on foldertree

This commit is contained in:
Klaus Leithoff 2015-02-19 12:01:18 +00:00
parent 212e98ccdb
commit acb4f11d24
2 changed files with 115 additions and 1 deletions

View File

@ -624,6 +624,19 @@ class mail_ui
); );
break; break;
} }
++$group; // put empty spam immediately in own group
$junkFolder = $this->mail_bo->getJunkFolder();
//error_log(__METHOD__.__LINE__.$junkFolder);
if ($junkFolder && !empty($junkFolder))
{
$tree_actions['empty_spam'] = array(
'caption' => 'empty spam',
'icon' => 'dhtmlxtree/MailFolderJunk',
'enabled' => 'javaScript:app.mail.spamfolder_enabled',
'onExecute' => 'javaScript:app.mail.mail_emptySpam',
'group' => $group,
);
}
// enforce global (group-specific) ACL // enforce global (group-specific) ACL
if (!mail_hooks::access('aclmanagement')) if (!mail_hooks::access('aclmanagement'))
@ -817,7 +830,7 @@ class mail_ui
'child'=> (int)($acc_id != $_profileID || $folderObjects), // dynamic loading on unfold 'child'=> (int)($acc_id != $_profileID || $folderObjects), // dynamic loading on unfold
'parent' => '', 'parent' => '',
// mark on account if Sieve is enabled // mark on account if Sieve is enabled
'data' => array('sieve' => $accountObj->imapServer()->acc_sieve_enabled), 'data' => array('sieve' => $accountObj->imapServer()->acc_sieve_enabled,'spamfolder'=>($accountObj->imapServer()->acc_folder_junk?true:false)),
); );
$this->setOutStructure($oA, $out, self::$delimiter); $this->setOutStructure($oA, $out, self::$delimiter);
@ -4213,6 +4226,56 @@ class mail_ui
$response->call('app.mail.mail_setQuotaDisplay',array('data'=>$content)); $response->call('app.mail.mail_setQuotaDisplay',array('data'=>$content));
} }
/**
* Empty spam/junk folder
*
* @param string $icServerID id of the server to empty its junkFolder
* @param string $selectedFolder seleted(active) folder by nm filter
* @return nothing
*/
function ajax_emptySpam($icServerID, $selectedFolder)
{
//error_log(__METHOD__.__LINE__.' '.$icServerID);
translation::add_app('mail');
$response = egw_json_response::get();
$rememberServerID = $this->mail_bo->profileID;
if ($icServerID && $icServerID != $this->mail_bo->profileID)
{
//error_log(__METHOD__.__LINE__.' change Profile to ->'.$icServerID);
$this->changeProfile($icServerID);
}
$junkFolder = $this->mail_bo->getJunkFolder();
if(!empty($junkFolder)) {
if ($selectedFolder == $icServerID.self::$delimiter.$junkFolder)
{
// Lock the tree if the active folder is Trash folder
$response->call('app.mail.lock_tree');
}
$this->mail_bo->deleteMessages('all',$junkFolder,'remove_immediately');
$heirarchyDelimeter = $this->mail_bo->getHierarchyDelimiter(true);
$fShortName = array_pop(explode($heirarchyDelimeter, $junkFolder));
$fStatus = array(
$icServerID.self::$delimiter.$trashFolder => lang($fShortName)
);
//Call to reset folder status counter, after junkFolder triggered not from Junk folder
//-as we don't have trash folder specific information available on client-side we need to deal with it on server
$response->call('app.mail.mail_setFolderStatus',$fStatus);
}
if ($rememberServerID != $this->mail_bo->profileID)
{
$oldFolderInfo = $this->mail_bo->getFolderStatus($junkFolder,false,false,false);
$response->call('egw.message',lang('empty junk'));
$response->call('app.mail.mail_reloadNode',array($icServerID.self::$delimiter.$junkFolder=>$oldFolderInfo['shortDisplayName']));
//error_log(__METHOD__.__LINE__.' change Profile to ->'.$rememberServerID);
$this->changeProfile($rememberServerID);
}
else if ($selectedFolder == $icServerID.self::$delimiter.$junkFolder)
{
$response->call('egw.refresh',lang('empty junk'),'mail');
}
}
/** /**
* Empty trash folder * Empty trash folder
* *

View File

@ -1210,6 +1210,25 @@ app.classes.mail = AppJS.extend(
return true; return true;
}, },
/**
* Check if SpamFolder is enabled on that account
*
* SpamFolder enabled is stored as data { spamfolder: true/false } on account node.
*
* @param {object} _action
* @param {object} _senders the representation of the tree leaf to be manipulated
* @param {object} _currentNode
*/
spamfolder_enabled: function(_action,_senders,_currentNode)
{
var ftree = this.et2.getWidgetById(this.nm_index+'[foldertree]');
var acc_id = _senders[0].id.split('::')[0];
var node = ftree ? ftree.getNode(acc_id) : null;
return node && node.data && node.data.spamfolder;
},
/** /**
* Check if Sieve is enabled on that account * Check if Sieve is enabled on that account
* *
@ -1574,6 +1593,38 @@ app.classes.mail = AppJS.extend(
// setting class of row, the old style // setting class of row, the old style
}, },
/**
* mail_emptySpam
*
* @param {object} action
* @param {object} _senders
*/
mail_emptySpam: function(action,_senders) {
var server = _senders[0].iface.id.split('::');
var activeFilters = this.mail_getActiveFilters();
var self = this;
this.egw.message(this.egw.lang('empty spam'));
egw.json('mail.mail_ui.ajax_emptySpam',[server[0], activeFilters['selectedFolder']? activeFilters['selectedFolder']:null],function(){self.unlock_tree();})
.sendRequest(true);
// Directly delete any trash cache for selected server
if(window.localStorage)
{
for(var i = 0; i < window.localStorage.length; i++)
{
var key = window.localStorage.key(i);
// Find directly by what the key would look like
if(key.indexOf('cached_fetch_mail::{"selectedFolder":"'+server[0]+'::') == 0 &&
key.toLowerCase().indexOf(egw.lang('junk').toLowerCase()) > 0)
{
window.localStorage.removeItem(key);
}
}
}
},
/** /**
* mail_emptyTrash * mail_emptyTrash
* *