From 1dd472f567e61767a84dd4e139f51d1780d37d41 Mon Sep 17 00:00:00 2001 From: Klaus Leithoff Date: Tue, 3 Dec 2013 14:38:50 +0000 Subject: [PATCH] attempt to fix getMailboxes / getMailboxesRecursive --- mail/inc/class.mail_bo.inc.php | 37 +++++++++++++++++++---------- mail/inc/class.mail_compose.inc.php | 1 + mail/inc/class.mail_ui.inc.php | 20 ++++++++++++++-- mail/js/app.js | 34 ++++++++++++++++++++++++++ mail/templates/default/index.xet | 1 + 5 files changed, 78 insertions(+), 15 deletions(-) diff --git a/mail/inc/class.mail_bo.inc.php b/mail/inc/class.mail_bo.inc.php index eaec40d345..49ce008fcf 100644 --- a/mail/inc/class.mail_bo.inc.php +++ b/mail/inc/class.mail_bo.inc.php @@ -1195,6 +1195,16 @@ class mail_bo } } } + if(is_array($headerObject['CC']) && $headerObject['CC'][0]) { + $ki=0; + foreach($headerObject['CC'] as $k => $add) + { + //error_log(__METHOD__.__LINE__."-> $k:".array2string($add)); + $retValue['header'][$sortOrder[$uid]]['cc_addresses'][$ki]['address'] = self::decode_header($add); + //error_log(__METHOD__.__LINE__.array2string($retValue['header'][$sortOrder[$uid]]['additional_to_addresses'][$ki])); + $ki++; + } + } //error_log(__METHOD__.__LINE__.array2string($retValue['header'][$sortOrder[$uid]])); $count++; @@ -1886,7 +1896,7 @@ class mail_bo $allMailboxes = array(); foreach ((array)$allMailBoxesExtSorted as $mbx) { //echo $mbx['MAILBOX']."
"; - if (in_array('\HasChildren',$mbx["ATTRIBUTES"]) || in_array('\Haschildren',$mbx["ATTRIBUTES"])) { + if (in_array('\HasChildren',$mbx["ATTRIBUTES"]) || in_array('\Haschildren',$mbx["ATTRIBUTES"]) || in_array('\haschildren',$mbx["ATTRIBUTES"])) { unset($buff); //$buff = $this->icServer->getMailboxes($mbx['MAILBOX'].$delimiter,0,false); if (!in_array($mbx['MAILBOX'],$allMailboxes)) $buff = self::getMailBoxesRecursive($mbx['MAILBOX'],$delimiter,$foldersNameSpace[$type]['prefix'],1); @@ -2180,26 +2190,27 @@ class mail_bo //get that mailbox in question $mbx = $this->icServer->getMailboxes($_mailbox,1,true); #_debug_array($mbx); - if (is_array($mbx[0]["ATTRIBUTES"]) && (in_array('\HasChildren',$mbx[0]["ATTRIBUTES"]) || in_array('\Haschildren',$mbx[0]["ATTRIBUTES"]))) { +//error_log(__METHOD__.__LINE__.' Delimiter:'.array2string($delimiter)); +//error_log(__METHOD__.__LINE__.array2string($mbx)); + if (is_array($mbx[0]["ATTRIBUTES"]) && (in_array('\HasChildren',$mbx[0]["ATTRIBUTES"]) || in_array('\Haschildren',$mbx[0]["ATTRIBUTES"]) || in_array('\haschildren',$mbx[0]["ATTRIBUTES"]))) { // if there are children fetch them //echo $mbx[0]['MAILBOX']."
"; unset($buff); $buff = $this->icServer->getMailboxes($mbx[0]['MAILBOX'].($mbx[0]['MAILBOX'] == $prefix ? '':$delimiter),2,false); //$buff = $this->icServer->getMailboxes($mbx[0]['MAILBOX'],2,false); //_debug_array($buff); - if( PEAR::isError($buff) ) { - if (self::$debug) error_log(__METHOD__." Error while retrieving Mailboxes for:".$mbx[0]['MAILBOX'].$delimiter."."); - return array(); - } else { - $allMailboxes = array(); - foreach ($buff as $mbxname) { - $mbxname = preg_replace('~'.($delimiter == '.' ? "\\".$delimiter:$delimiter).'+~s',$delimiter,$mbxname); - #echo "About to recur in level $reclevel:".$mbxname."
"; - if ( $mbxname != $mbx[0]['MAILBOX'] && $mbxname != $prefix && $mbxname != $mbx[0]['MAILBOX'].$delimiter) $allMailboxes = array_merge($allMailboxes, self::getMailBoxesRecursive($mbxname, $delimiter, $prefix, $reclevel)); + $allMailboxes = array(); + foreach ($buff as $mbxname) { +//error_log(__METHOD__.__LINE__.array2string($mbxname)); + $mbxname = preg_replace('~'.($delimiter == '.' ? "\\".$delimiter:$delimiter).'+~s',$delimiter,$mbxname['MAILBOX']); + #echo "About to recur in level $reclevel:".$mbxname."
"; + if ( $mbxname != $mbx[0]['MAILBOX'] && $mbxname != $prefix && $mbxname != $mbx[0]['MAILBOX'].$delimiter) + { + $allMailboxes = array_merge($allMailboxes, self::getMailBoxesRecursive($mbxname, $delimiter, $prefix, $reclevel)); } - if (!(in_array('\NoSelect',$mbx[0]["ATTRIBUTES"]) || in_array('\Noselect',$mbx[0]["ATTRIBUTES"]))) $allMailboxes[] = $mbx[0]['MAILBOX']; - return $allMailboxes; } + if (!(in_array('\NoSelect',$mbx[0]["ATTRIBUTES"]) || in_array('\Noselect',$mbx[0]["ATTRIBUTES"]) || in_array('\noselect',$mbx[0]["ATTRIBUTES"]))) $allMailboxes[] = $mbx[0]['MAILBOX']; + return $allMailboxes; } else { return array($_mailbox); } diff --git a/mail/inc/class.mail_compose.inc.php b/mail/inc/class.mail_compose.inc.php index 355bbeefd9..bf3d668d6b 100644 --- a/mail/inc/class.mail_compose.inc.php +++ b/mail/inc/class.mail_compose.inc.php @@ -1111,6 +1111,7 @@ class mail_compose $value = htmlspecialchars_decode($value,ENT_COMPAT); $value = str_replace("\"\"",'"',$value); $address_array = imap_rfc822_parse_adrlist((get_magic_quotes_gpc()?stripslashes($value):$value), ''); + unset($content[strtolower($destination)]); foreach((array)$address_array as $addressObject) { if ($addressObject->host == '.SYNTAX-ERROR.') continue; $address = imap_rfc822_write_address($addressObject->mailbox,$addressObject->host,$addressObject->personal); diff --git a/mail/inc/class.mail_ui.inc.php b/mail/inc/class.mail_ui.inc.php index f4522fb8f2..708b6d34ea 100644 --- a/mail/inc/class.mail_ui.inc.php +++ b/mail/inc/class.mail_ui.inc.php @@ -142,6 +142,7 @@ class mail_ui 'msg' => $e->getMessage()//.' ('.get_class($e).': '.$e->getCode().')', )); } + $GLOBALS['egw']->session->commit_session(); //_debug_array($this->mail_bo->mailPreferences); //$endtime = microtime(true) - $starttime; @@ -186,9 +187,11 @@ class mail_ui $starttime = microtime (true); $this->mail_bo->restoreSessionData(); $sessionFolder = $this->mail_bo->sessionData['mailbox']; + $toSchema = false;//decides to select list schema with column to selected (if false fromaddress is default) if ($this->mail_bo->folderExists($sessionFolder)) { $this->mail_bo->reopen($sessionFolder); // needed to fetch full set of capabilities + $toSchema = $this->mail_bo->isDraftFolder($sessionFolder)||$this->mail_bo->isSentFolder($sessionFolder)||$this->mail_bo->isTemplateFolder($sessionFolder); } //_debug_array($content); if (!is_array($content)) @@ -209,7 +212,7 @@ class mail_ui 'start' => 0, // IO position in list 'order' => 'date', // IO name of the column to sort after (optional for the sortheaders) 'sort' => 'DESC', // IO direction of the sort: 'ASC' or 'DESC' - 'default_cols' => 'status,attachments,subject,fromaddress,date,size', // I columns to use if there's no user or default pref (! as first char uses all but the named columns), default all columns + 'default_cols' => 'status,attachments,subject,'.($toSchema?'toaddress':'fromaddress').',date,size', // I columns to use if there's no user or default pref (! as first char uses all but the named columns), default all columns 'csv_fields' => false, // I false=disable csv export, true or unset=enable it with auto-detected fieldnames, //or array with name=>label or name=>array('label'=>label,'type'=>type) pairs (type is a eT widget-type) 'actions' => self::get_actions(), @@ -1211,7 +1214,7 @@ unset($query['actions']); if (empty($rowsFetched['messages'])) $rowsFetched['messages'] = $rowsFetched['rowsFetched']; //error_log(__METHOD__.__LINE__.' Rows fetched:'.$rowsFetched.' Data:'.array2string($sortResult)); - $cols = array('row_id','uid','status','attachments','subject','toaddress','fromaddress','date','size','modified'); + $cols = array('row_id','uid','status','attachments','subject','toaddress','fromaddress','ccaddress','additionaltoaddress','date','size','modified'); if ($GLOBALS['egw_info']['user']['preferences']['common']['select_mode']=='EGW_SELECTMODE_TOGGLE') unset($cols[0]); $rows = $this->header2gridelements($sortResult['header'],$cols, $_folderName, $folderType,$previewMessage); //error_log(__METHOD__.__LINE__.array2string($rows)); @@ -1482,11 +1485,19 @@ unset($query['actions']); $data["toaddress"] = $header['to_address'];//mail_bo::htmlentities($header['to_address'],$this->charset); } + if (in_array("additionaltoaddress", $cols)) + { + $data['additionaltoaddress'] = json_encode($header['additional_to_addresses']); + } //fromaddress if (in_array("fromaddress", $cols)) { $data["fromaddress"] = $header['sender_address'];//mail_bo::htmlentities($header['sender_address'],$this->charset); } + if (in_array("ccaddress", $cols)) + { + $data['ccaddress'] = json_encode($header['cc_addresses']); + } if (in_array("date", $cols)) { $data["date"] = $header['date'];//$dateShort;//''.$dateShort.''; @@ -3240,6 +3251,11 @@ blockquote[type=cite] { } } } + if ($folderName==$this->mail_bo->sessionData['mailbox']) + { + $this->mail_bo->sessionData['mailbox']=$newFolderName; + $this->mail_bo->saveSessionData(); + } //error_log(__METHOD__.__LINE__.array2string($oA)); if ($oA) { diff --git a/mail/js/app.js b/mail/js/app.js index a2a08d4739..1897322236 100644 --- a/mail/js/app.js +++ b/mail/js/app.js @@ -495,6 +495,7 @@ app.classes.mail = AppJS.extend( this.et2.getWidgetById('previewToAddress').set_value(""); this.et2.getWidgetById('previewDate').set_value(""); this.et2.getWidgetById('previewSubject').set_value(""); + this.et2.getWidgetById('button[showAllAddresses]').set_class('et2_button ui-button mail_DisplayNone'); this.et2.getWidgetById('previewAttachmentArea').set_value({content:[]}); this.et2.getWidgetById('previewAttachmentArea').set_class('previewAttachmentArea noContent mail_DisplayNone'); var IframeHandle = this.et2.getWidgetById('messageIFRAME'); @@ -510,6 +511,16 @@ app.classes.mail = AppJS.extend( this.et2.getWidgetById('previewToAddress').set_value(dataElem.data.toaddress); this.et2.getWidgetById('previewDate').set_value(dataElem.data.date); this.et2.getWidgetById('previewSubject').set_value(subject); + if (dataElem.data.additionaltoaddress=="null") dataElem.data.additionaltoaddress=''; + if (dataElem.data.ccaddress=='null') dataElem.data.ccaddress=''; + if ((dataElem.data.additionaltoaddress.length+dataElem.data.ccaddress.length)<1) + { + this.et2.getWidgetById('button[showAllAddresses]').set_class('et2_button ui-button mail_DisplayNone'); + } + else + { + this.et2.getWidgetById('button[showAllAddresses]').set_class('et2_button ui-button'); + } if (dataElem.data.attachmentsBlock.length<1) { this.et2.getWidgetById('previewAttachmentArea').set_class('previewAttachmentArea noContent mail_DisplayNone'); @@ -529,6 +540,29 @@ app.classes.mail = AppJS.extend( // request.sendRequest(false); }, + /** + * mail_showAllAddresses + * requires: mainWindow, one mail selected for preview + */ + mail_showAllAddresses: function(_id) { + var dataElem = {data:{subject:"",fromaddress:"",toaddress:"",additionaltoaddress:"",ccaddress:"",date:"",subject:""}}; + dataElem = egw.dataGetUIDdata(_id); + console.log(_id,dataElem); + var buttons = [ + {text: this.egw.lang("Close"), id:"close"} + ]; + et2_dialog.show_dialog(function(_button_id) + { + switch(_button_id) + { + case 'close': + default: + break; + } + },this.egw.lang("text one"), + dataElem.data.subject, {}, buttons, et2_dialog.WARNING_MESSAGE); + }, + mail_setMailBody: function(content) { //console.log('mail_setMailBody',content); var IframeHandle = this.et2.getWidgetById('messageIFRAME'); diff --git a/mail/templates/default/index.xet b/mail/templates/default/index.xet index e7c46bf469..b40e855808 100644 --- a/mail/templates/default/index.xet +++ b/mail/templates/default/index.xet @@ -52,6 +52,7 @@ +