get filters to work, empty trash, etc.

This commit is contained in:
Klaus Leithoff 2013-11-04 11:22:38 +00:00
parent e2b9443fa0
commit cfc3550d6f
6 changed files with 94 additions and 59 deletions

View File

@ -989,6 +989,8 @@ $_restoreSession=false;
} }
if (self::$debug) error_log(__METHOD__.__LINE__."$_folderName, $_sort, $reverse, ".array2string($_filter).", $rByUid"); if (self::$debug) error_log(__METHOD__.__LINE__."$_folderName, $_sort, $reverse, ".array2string($_filter).", $rByUid");
if (self::$debug) $starttime = microtime (true); if (self::$debug) $starttime = microtime (true);
//see this example below for a 12 week datefilter (since)
//$_filter = array('status'=>array('UNDELETED'),'type'=>"SINCE",'string'=> date("d-M-Y", $starttime-(3600*24*7*12)));
$_sortResult = $this->getSortedList($_folderName, $_sort, $reverse, $_filter, $rByUid, $_cacheResult); $_sortResult = $this->getSortedList($_folderName, $_sort, $reverse, $_filter, $rByUid, $_cacheResult);
$sortResult = $_sortResult['match']->ids; $sortResult = $_sortResult['match']->ids;
if (self::$debug) if (self::$debug)
@ -1433,41 +1435,48 @@ $_restoreSession=false;
function createIMAPFilter($_folder, $_criterias) function createIMAPFilter($_folder, $_criterias)
{ {
$imapFilter = new Horde_Imap_Client_Search_Query(); $imapFilter = new Horde_Imap_Client_Search_Query();
return $imapFilter;
$all = 'ALL UNDELETED'; //'ALL'
//_debug_array($_criterias); //_debug_array($_criterias);
if (self::$debug) error_log(__METHOD__.__LINE__.' Criterias:'.(!is_array($_criterias)?" none -> returning $all":array2string($_criterias))); if (self::$debug) error_log(__METHOD__.__LINE__.' Criterias:'.(!is_array($_criterias)?" none -> returning $all":array2string($_criterias)));
if(!is_array($_criterias)) { if(!is_array($_criterias)) {
return $all; return $imapFilter->flag('DELETED', $set=false);
} }
#error_log(print_r($_criterias, true)); #error_log(print_r($_criterias, true));
$imapFilter = ''; $queryValid = false;
#foreach($_criterias as $criteria => $parameter) {
if(!empty($_criterias['string'])) { if(!empty($_criterias['string'])) {
$criteria = strtoupper($_criterias['type']); $criteria = strtoupper($_criterias['type']);
switch ($criteria) { switch ($criteria) {
case 'QUICK': case 'QUICK':
$imapFilter->headerText('SUBJECT', $_criterias['string'], $not=false);
$imapFilter2 = new Horde_Imap_Client_Search_Query();
if($this->isSentFolder($_folder)) { if($this->isSentFolder($_folder)) {
$imapFilter .= 'OR SUBJECT "'. $_criterias['string'] .'" TO "'. $_criterias['string'] .'" '; $imapFilter2->headerText('TO', $_criterias['string'], $not=false);
} else { } else {
$imapFilter .= 'OR SUBJECT "'. $_criterias['string'] .'" FROM "'. $_criterias['string'] .'" '; $imapFilter2->headerText('FROM', $_criterias['string'], $not=false);
} }
$imapFilter->orSearch($imapFilter2);
$queryValid = true;
break; break;
case 'BCC':
case 'BODY':
case 'CC':
case 'FROM': case 'FROM':
case 'KEYWORD':
case 'SUBJECT':
case 'TEXT':
case 'TO': case 'TO':
$imapFilter .= $criteria .' "'. $_criterias['string'] .'" '; case 'CC':
case 'BCC':
case 'SUBJECT':
$imapFilter->headerText($criteria, $_criterias['string'], $not=false);
$queryValid = true;
break;
case 'BODY':
case 'TEXT':
$imapFilter->text($_criterias['string'],($criteria=='BODY'?true:false), $not=false);
break; break;
case 'SINCE': case 'SINCE':
$imapFilter->dateSearch(new DateTime($_criterias['string']), Horde_Imap_Client_Search_Query::DATE_SINCE, $header=true, $not=false);
break;
case 'BEFORE': case 'BEFORE':
$imapFilter->dateSearch(new DateTime($_criterias['string']), Horde_Imap_Client_Search_Query::DATE_BEFORE, $header=true, $not=false);
break;
case 'ON': case 'ON':
$imapFilter .= $criteria .' '. $_criterias['string'].' '; $imapFilter->dateSearch(new DateTime($_criterias['string']), Horde_Imap_Client_Search_Query::DATE_ON, $header=true, $not=false);
break; break;
} }
} }
@ -1478,36 +1487,46 @@ $_restoreSession=false;
case 'ANSWERED': case 'ANSWERED':
case 'DELETED': case 'DELETED':
case 'FLAGGED': case 'FLAGGED':
case 'NEW':
case 'OLD':
case 'RECENT': case 'RECENT':
case 'SEEN': case 'SEEN':
case 'UNANSWERED':
case 'UNDELETED':
case 'UNFLAGGED':
case 'UNSEEN':
$imapFilter .= $criteria .' ';
break;
case 'KEYWORD1': case 'KEYWORD1':
case 'KEYWORD2': case 'KEYWORD2':
case 'KEYWORD3': case 'KEYWORD3':
case 'KEYWORD4': case 'KEYWORD4':
case 'KEYWORD5': case 'KEYWORD5':
$imapFilter .= "KEYWORD ".'$label'.substr(trim($criteria),strlen('KEYWORD')).' '; $imapFilter->flag($criteria, $set=true);
$queryValid = true;
break;
case 'NEW':
$imapFilter->flag('RECENT', $set=true);
$imapFilter->flag('SEEN', $set=false);
$queryValid = true;
break;
case 'OLD':
$imapFilter->flag('RECENT', $set=false);
break;
case 'UNANSWERED':
case 'UNDELETED':
case 'UNFLAGGED':
case 'UNSEEN':
$imapFilter->flag($criteria, $set=false);
$queryValid = true;
break; break;
} }
} }
if (isset($_criterias['range']) && !empty($_criterias['range'])) if (isset($_criterias['range']) && !empty($_criterias['range']))
{ {
$imapFilter .= $_criterias['range'].' '; //$imapFilter .= $_criterias['range'].' ';
} }
if (self::$debug) error_log(__METHOD__.__LINE__." Filter: ".($imapFilter?$imapFilter:$all)); if (self::$debug)
if($imapFilter == '') { {
return $all; $query_str = $imapFilter->build();
error_log(__METHOD__.__LINE__.' '.$query_str['query']);
}
if($queryValid==false) {
return $imapFilter->flag('DELETED', $set=false);
} else { } else {
return trim($imapFilter); return $imapFilter;
#return 'CHARSET '. strtoupper(self::$displayCharset) .' '. trim($imapFilter);
} }
} }
@ -2126,7 +2145,7 @@ $_restoreSession=false;
function getMailBoxCounters($folderName) function getMailBoxCounters($folderName)
{ {
$folderStatus = $this->_getStatus($folderName); $folderStatus = $this->_getStatus($folderName);
error_log(__METHOD__.__LINE__." FolderStatus:".array2string($folderStatus)); //error_log(__METHOD__.__LINE__." FolderStatus:".array2string($folderStatus));
if ( PEAR::isError($folderStatus)) { if ( PEAR::isError($folderStatus)) {
if (self::$debug) error_log(__METHOD__." returned FolderStatus for Folder $folderName:".print_r($folderStatus->message,true)); if (self::$debug) error_log(__METHOD__." returned FolderStatus for Folder $folderName:".print_r($folderStatus->message,true));
return false; return false;
@ -2482,10 +2501,9 @@ $_restoreSession=false;
$this->icServer->openMailbox($folderName); $this->icServer->openMailbox($folderName);
if($folderName == $trashFolder && $deleteOptions == "move_to_trash") { if($folderName == $trashFolder && $deleteOptions == "move_to_trash") {
$this->deleteMessages('all'); $this->deleteMessages('all',$folderName,'remove_immediately');
$this->icServer->expunge();
} else { } else {
$this->icServer->expunge(); $this->icServer->expunge($folderName);
} }
} }
@ -2500,7 +2518,7 @@ $_restoreSession=false;
*/ */
function deleteMessages($_messageUID, $_folder=NULL, $_forceDeleteMethod='no') function deleteMessages($_messageUID, $_folder=NULL, $_forceDeleteMethod='no')
{ {
//error_log(__METHOD__.__LINE__.'->'.array2string($_messageUID).','.array2string($_folder)); error_log(__METHOD__.__LINE__.'->'.array2string($_messageUID).','.array2string($_folder).', '.$_forceDeleteMethod);
$msglist = ''; $msglist = '';
$oldMailbox = ''; $oldMailbox = '';
if (is_null($_folder) || empty($_folder)) $_folder = $this->sessionData['mailbox']; if (is_null($_folder) || empty($_folder)) $_folder = $this->sessionData['mailbox'];
@ -2512,7 +2530,7 @@ $_restoreSession=false;
} }
else else
{ {
if (self::$debug); error_log(__METHOD__." no messages Message(s): ".implode(',',$_messageUID)); if (self::$debug) error_log(__METHOD__." no messages Message(s): ".implode(',',$_messageUID));
return false; return false;
} }
} }
@ -2550,6 +2568,7 @@ $_restoreSession=false;
case "mark_as_deleted": case "mark_as_deleted":
// mark messages as deleted // mark messages as deleted
if (is_null($_messageUID)) $_messageUID='all';
foreach((array)$_messageUID as $key =>$uid) foreach((array)$_messageUID as $key =>$uid)
{ {
//flag messages, that are flagged for deletion as seen too //flag messages, that are flagged for deletion as seen too
@ -2568,19 +2587,21 @@ $_restoreSession=false;
case "remove_immediately": case "remove_immediately":
$updateCache = true; $updateCache = true;
if (is_null($_messageUID)) $_messageUID='all';
foreach((array)$_messageUID as $key =>$uid) foreach((array)$_messageUID as $key =>$uid)
{ {
//flag messages, that are flagged for deletion as seen too //flag messages, that are flagged for deletion as seen too
$this->flagMessages('delete', $uid, $_folder); $this->flagMessages('delete', $uid, $_folder);
} }
// delete the messages finaly // delete the messages finaly
$this->icServer->expunge(); $this->icServer->expunge($_folder);
break; break;
} }
if ($updateCache) if ($updateCache)
{ {
$structure = egw_cache::getCache(egw_cache::INSTANCE,'email','structureCache'.trim($GLOBALS['egw_info']['user']['account_id']),$callback=null,$callback_params=array(),$expiration=60*60*1); $structure = egw_cache::getCache(egw_cache::INSTANCE,'email','structureCache'.trim($GLOBALS['egw_info']['user']['account_id']),$callback=null,$callback_params=array(),$expiration=60*60*1);
$cachemodified = false; $cachemodified = false;
if (is_null($_messageUID)) $_messageUID='all';
foreach ((array)$_messageUID as $k => $_uid) foreach ((array)$_messageUID as $k => $_uid)
{ {
if (isset($structure[$this->icServer->ImapServerId][$_folder][$_uid]) || $_uid=='all') if (isset($structure[$this->icServer->ImapServerId][$_folder][$_uid]) || $_uid=='all')
@ -2833,9 +2854,6 @@ $_restoreSession=false;
} }
} }
if ($cachemodified) egw_cache::setCache(egw_cache::INSTANCE,'email','structureCache'.trim($GLOBALS['egw_info']['user']['account_id']),$structure,$expiration=60*60*1); if ($cachemodified) egw_cache::setCache(egw_cache::INSTANCE,'email','structureCache'.trim($GLOBALS['egw_info']['user']['account_id']),$structure,$expiration=60*60*1);
// delete the messages finaly
$this->icServer->expunge();
} }
} }
$summary = egw_cache::getCache(egw_cache::INSTANCE,'email','summaryCache'.trim($GLOBALS['egw_info']['user']['account_id']),$callback=null,$callback_params=array(),$expiration=60*60*1); $summary = egw_cache::getCache(egw_cache::INSTANCE,'email','summaryCache'.trim($GLOBALS['egw_info']['user']['account_id']),$callback=null,$callback_params=array(),$expiration=60*60*1);

View File

@ -264,7 +264,6 @@ error_log(__METHOD__.__LINE__.' Not done jet');
$_profileIDs = array_keys($profileData_); $_profileIDs = array_keys($profileData_);
$_profileID = $_profileIDs[0]; $_profileID = $_profileIDs[0];
$profileData = $profileData_[$_profileID]; $profileData = $profileData_[$_profileID];
_debug_array($profileData->imapServer());
$icProfileID = $profileData->__get('acc_id'); $icProfileID = $profileData->__get('acc_id');
$ogProfileID = $profileData->__get('acc_id'); $ogProfileID = $profileData->__get('acc_id');
//error_log(__METHOD__.__LINE__.' ServerProfile(s)Fetched->'.array2string(count($profileData->ic_server))); //error_log(__METHOD__.__LINE__.' ServerProfile(s)Fetched->'.array2string(count($profileData->ic_server)));

View File

@ -771,18 +771,18 @@ class mail_hooks
'icon' => false 'icon' => false
); );
// empty trash (if available -> move to trash ) // empty trash (if available -> move to trash )
if($preferences->preferences['deleteOptions'] == 'move_to_trash') if($preferences['deleteOptions'] == 'move_to_trash')
{ {
$file += array( $file += array(
'_NewLine_' => '', // give a newline '_NewLine_' => '', // give a newline
'empty trash' => "javascript:app.mail.mail_emptyTrash();", 'empty trash' => "javascript:mail_callEmptyTrash();",
); );
} }
if($preferences->preferences['deleteOptions'] == 'mark_as_deleted') if($preferences['deleteOptions'] == 'mark_as_deleted')
{ {
$file += array( $file += array(
'_NewLine_' => '', // give a newline '_NewLine_' => '', // give a newline
'compress folder' => "javascript:app.mail.mail_compressFolder();", 'compress folder' => "javascript:mail_callCompressFolder();",
); );
} }
// import Message link - only when the required library is available // import Message link - only when the required library is available
@ -829,10 +829,10 @@ class mail_hooks
$file['Manage Signatures'] = egw::link('/index.php',$linkData); $file['Manage Signatures'] = egw::link('/index.php',$linkData);
} }
if ($preferences->preferences['prefcontroltestconnection'] <> 'none') $file['Test Connection'] = egw::link('/index.php','menuaction=mail.mail_ui.TestConnection&appname=mail'); if ($preferences['prefcontroltestconnection'] <> 'none') $file['Test Connection'] = egw::link('/index.php','menuaction=mail.mail_ui.TestConnection&appname=mail');
/* /*
if(empty($preferences->preferences['prefpreventmanagefolders']) || $preferences->preferences['prefpreventmanagefolders'] == 0) { if(empty($preferences['prefpreventmanagefolders']) || $preferences['prefpreventmanagefolders'] == 0) {
$file['Manage Folders'] = egw::link('/index.php',array('menuaction'=>'mail.uipreferences.listFolder')); $file['Manage Folders'] = egw::link('/index.php',array('menuaction'=>'mail.uipreferences.listFolder'));
} }
if (is_object($preferences)) $ogServer = $preferences->getOutgoingServer(0); if (is_object($preferences)) $ogServer = $preferences->getOutgoingServer(0);
@ -843,7 +843,7 @@ class mail_hooks
( (
'menuaction' => 'mail.uipreferences.editForwardingAddress', 'menuaction' => 'mail.uipreferences.editForwardingAddress',
); );
//if(empty($preferences->preferences['prefpreventforwarding']) || $preferences->preferences['prefpreventforwarding'] == 0) //if(empty($preferences['prefpreventforwarding']) || $preferences['prefpreventforwarding'] == 0)
$file['Forwarding'] = egw::link('/index.php',$linkData); $file['Forwarding'] = egw::link('/index.php',$linkData);
} }
} }
@ -857,19 +857,19 @@ class mail_hooks
( (
'menuaction' => 'mail.mail_sieve.index', 'menuaction' => 'mail.mail_sieve.index',
); );
if(empty($preferences->preferences['prefpreventeditfilterrules']) || $preferences->preferences['prefpreventeditfilterrules'] == 0) if(empty($preferences['prefpreventeditfilterrules']) || $preferences['prefpreventeditfilterrules'] == 0)
$file['filter rules'] = egw::link('/index.php',$linkData); $file['filter rules'] = egw::link('/index.php',$linkData);
$linkData = array $linkData = array
( (
'menuaction' => 'mail.mail_sieve.editVacation', 'menuaction' => 'mail.mail_sieve.editVacation',
); );
if(empty($preferences->preferences['prefpreventabsentnotice']) || $preferences->preferences['prefpreventabsentnotice'] == 0) if(empty($preferences['prefpreventabsentnotice']) || $preferences['prefpreventabsentnotice'] == 0)
{ {
$file['vacation notice'] = egw::link('/index.php',$linkData); $file['vacation notice'] = egw::link('/index.php',$linkData);
} }
if((empty($preferences->preferences['prefpreventnotificationformailviaemail']) || if((empty($preferences['prefpreventnotificationformailviaemail']) ||
$preferences->preferences['prefpreventnotificationformailviaemail'] == 0)) $preferences['prefpreventnotificationformailviaemail'] == 0))
{ {
$file['email notification'] = egw::link('/index.php','menuaction=mail.mail_sieve.editEmailNotification'); //Added email notifications $file['email notification'] = egw::link('/index.php','menuaction=mail.mail_sieve.editEmailNotification'); //Added email notifications
} }

View File

@ -3020,6 +3020,10 @@ blockquote[type=cite] {
if ($fS['unseen']) if ($fS['unseen'])
{ {
$oA[$_folderName] = '<b>'.$fS['shortDisplayName'].' ('.$fS['unseen'].')</b>'; $oA[$_folderName] = '<b>'.$fS['shortDisplayName'].' ('.$fS['unseen'].')</b>';
}
if ($fS['unseen']==0)
{
$oA[$_folderName] = $fS['shortDisplayName'];
} }
} }

View File

@ -902,6 +902,7 @@ app.mail = AppJS.extend(
app.mail.app_refresh(this.egw.lang('empty trash'), 'mail'); app.mail.app_refresh(this.egw.lang('empty trash'), 'mail');
egw.json('mail.mail_ui.ajax_emptyTrash') egw.json('mail.mail_ui.ajax_emptyTrash')
.sendRequest(true); .sendRequest(true);
this.mail_refreshFolderStatus();
}, },
/** /**
@ -911,6 +912,7 @@ app.mail = AppJS.extend(
app.mail.app_refresh(this.egw.lang('compress folder'), 'mail'); app.mail.app_refresh(this.egw.lang('compress folder'), 'mail');
egw.json('mail.mail_ui.ajax_compressFolder') egw.json('mail.mail_ui.ajax_compressFolder')
.sendRequest(true); .sendRequest(true);
this.mail_refreshFolderStatus();
}, },
/** /**
@ -1034,6 +1036,7 @@ app.mail = AppJS.extend(
//mail_parentRefreshListRowStyle(msg,_action.id); //mail_parentRefreshListRowStyle(msg,_action.id);
} }
this.mail_flagMessages(_action.id,msg,(do_nmactions?false:true)); this.mail_flagMessages(_action.id,msg,(do_nmactions?false:true));
this.mail_refreshFolderStatus();
}, },
/** /**
@ -1958,3 +1961,14 @@ app.mail = AppJS.extend(
this.egw.open_link('mail.mail_wizard.edit&acc_id='+acc_id, '_blank', '640x480'); this.egw.open_link('mail.mail_wizard.edit&acc_id='+acc_id, '_blank', '640x480');
} }
}); });
// wrapper functions to call functions within app
function mail_callEmptyTrash()
{
app.mail.mail_emptyTrash();
}
function mail_callCompressFolder()
{
app.mail.mail_compressFolder();
}

View File

@ -5,8 +5,8 @@
* @link http://www.egroupware.org * @link http://www.egroupware.org
* @package mail * @package mail
* @subpackage setup * @subpackage setup
* @author Klaus Leithoff [kl@stylite.de] * @author Stylite AG [info@stylite.de]
* @copyright (c) 2013 by Klaus Leithoff <kl-AT-stylite.de> * @copyright (c) 2013 by Stylite AG <info-AT-stylite.de>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$ * @version $Id$
*/ */
@ -18,11 +18,11 @@ $setup_info['mail']['app_order'] = 2;
$setup_info['mail']['enable'] = 1; $setup_info['mail']['enable'] = 1;
$setup_info['mail']['index'] = 'mail.mail_ui.index&ajax=true'; $setup_info['mail']['index'] = 'mail.mail_ui.index&ajax=true';
$setup_info['mail']['author'] = 'Klaus Leithoff'; $setup_info['mail']['author'] = 'Stylite AG';
$setup_info['mail']['license'] = 'GPL'; $setup_info['mail']['license'] = 'GPL';
$setup_info['mail']['description'] = 'IMAP emailclient for eGroupWare'; $setup_info['mail']['description'] = 'IMAP emailclient for eGroupWare';
$setup_info['mail']['maintainer'] = 'Klaus Leithoff'; $setup_info['mail']['maintainer'] = 'Stylite AG';
$setup_info['mail']['maintainer_email'] = 'kl@stylite.de'; $setup_info['mail']['maintainer_email'] = 'info@stylite.de';
$setup_info['mail']['tables'] = array(); // former felamimail tables are used by mail_sopreferences $setup_info['mail']['tables'] = array(); // former felamimail tables are used by mail_sopreferences