diff --git a/dev/Styles/FolderList.less b/dev/Styles/FolderList.less index 27919f7b9..d11993121 100644 --- a/dev/Styles/FolderList.less +++ b/dev/Styles/FolderList.less @@ -7,6 +7,12 @@ &.focused .b-content { } + .b-folders-user { + .e-link.print-count.system .badge { + display: none !important; + } + } + .b-toolbar { position: absolute; top: 0; diff --git a/dev/View/User/MailBox/MessageView.js b/dev/View/User/MailBox/MessageView.js index 4cb65668c..488c55513 100644 --- a/dev/View/User/MailBox/MessageView.js +++ b/dev/View/User/MailBox/MessageView.js @@ -252,7 +252,7 @@ if (-1 < iIndex) { aResult[0] = true; - aResult[1] = (iIndex + 1) + ' / ' + iLen; + aResult[1] = (iIndex + 1) + '/' + iLen; aResult[2] = aThreads[iIndex]; aResult[3] = 0 < iIndex && aThreads[iIndex - 1] ? aThreads[iIndex - 1] : ''; aResult[4] = aThreads[iIndex + 1] ? aThreads[iIndex + 1] : ''; diff --git a/rainloop/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook.php b/rainloop/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook.php index 49f393109..8ea5a138e 100644 --- a/rainloop/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook.php +++ b/rainloop/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook.php @@ -353,7 +353,7 @@ class AddressBook extends \RainLoop\Providers\AbstractProvider $oVCard->UID = \Sabre\DAV\UUIDUtil::getUUID(); } - $oContact->PopulateByVCard($oVCard->serialize()); + $oContact->PopulateByVCard($oVCard->UID, $oVCard->serialize()); if (0 < \count($oContact->Properties)) { diff --git a/rainloop/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook/Classes/Contact.php b/rainloop/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook/Classes/Contact.php index 0a20fae41..7fd425139 100644 --- a/rainloop/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook/Classes/Contact.php +++ b/rainloop/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook/Classes/Contact.php @@ -182,7 +182,7 @@ class Contact /** * @return string */ - public function ToVCard($sPreVCard = '') + public function ToVCard($sPreVCard = '', $oLogger = null) { $this->UpdateDependentValues(); @@ -191,6 +191,11 @@ class Contact return ''; } + if ("\xef\xbb\xbf" === \substr($sPreVCard, 0, 3)) + { + $sPreVCard = \substr($sPreVCard, 3); + } + $oVCard = null; if (0 < \strlen($sPreVCard)) { @@ -198,7 +203,14 @@ class Contact { $oVCard = \Sabre\VObject\Reader::read($sPreVCard); } - catch (\Exception $oExc) {}; + catch (\Exception $oExc) + { + if ($oLogger) + { + $oLogger->WriteException($oExc); + $oLogger->WriteDump($sPreVCard); + } + } } if (!$oVCard) @@ -484,8 +496,13 @@ class Contact } } - public function PopulateByVCard($sVCard, $sEtag = '') + public function PopulateByVCard($sUid, $sVCard, $sEtag = '', $oLogger = null) { + if ("\xef\xbb\xbf" === \substr($sVCard, 0, 3)) + { + $sVCard = \substr($sVCard, 3); + } + $this->Properties = array(); if (!\class_exists('Sabre\DAV\Client')) @@ -502,7 +519,16 @@ class Contact { $oVCard = \Sabre\VObject\Reader::read($sVCard); } - catch (\Exception $oExc) {}; + catch (\Exception $oExc) + { + if ($oLogger) + { + $oLogger->WriteException($oExc); + $oLogger->WriteDump($sVCard); + } + + $this->IdContactStr = $sUid; + } $aProperties = array(); if ($oVCard) diff --git a/rainloop/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook/PdoAddressBook.php b/rainloop/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook/PdoAddressBook.php index dc27d9384..b2100bc05 100644 --- a/rainloop/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook/PdoAddressBook.php +++ b/rainloop/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook/PdoAddressBook.php @@ -91,12 +91,17 @@ class PdoAddressBook if ($aItem && isset($aItem['id_contact'], $aItem['id_contact_str'], $aItem['changed'], $aItem['deleted'], $aItem['etag']) && !empty($aItem['id_contact_str'])) { - $aResult[$aItem['id_contact_str']] = array( + $sKeyID = $aItem['id_contact_str']; + + $aResult[$sKeyID] = array( + 'deleted' => '1' === (string) $aItem['deleted'], 'id_contact' => $aItem['id_contact'], + 'uid' => $sKeyID, 'etag' => $aItem['etag'], 'changed' => (int) $aItem['changed'], - 'deleted' => '1' === (string) $aItem['deleted'] ); + + $aResult[$sKeyID]['changed_'] = \gmdate('c', $aResult[$sKeyID]['changed']); } } } @@ -141,12 +146,15 @@ class PdoAddressBook $sKeyID = \preg_replace('/\.vcf$/i', '', $sVcfFileName); $mResult[$sKeyID] = array( + 'deleted' => false, + 'uid' => $sKeyID, 'vcf' => $sVcfFileName, 'etag' => \trim(\trim($aItem['{dav:}getetag']), '"\''), 'lastmodified' => $aItem['{dav:}getlastmodified'], - 'changed' => \MailSo\Base\DateTimeHelper::ParseRFC2822DateString($aItem['{dav:}getlastmodified']), - 'deleted' => false + 'changed' => \MailSo\Base\DateTimeHelper::ParseRFC2822DateString($aItem['{dav:}getlastmodified']) ); + + $mResult[$sKeyID]['changed_'] = \gmdate('c', $mResult[$sKeyID]['changed']); } } } @@ -310,7 +318,7 @@ class PdoAddressBook } $oResponse = $this->davClientRequest($oClient, 'PUT', - $sPath.$oContact->CardDavNameUri(), $oContact->ToVCard($sExsistensBody)); + $sPath.$oContact->CardDavNameUri(), $oContact->ToVCard($sExsistensBody, $this->oLogger)."\r\n\r\n"); if ($oResponse && isset($oResponse['headers'], $oResponse['headers']['etag'])) { @@ -358,8 +366,9 @@ class PdoAddressBook $oContact = new \RainLoop\Providers\AddressBook\Classes\Contact(); } - $oContact->PopulateByVCard($sBody, - !empty($oResponse['headers']['etag']) ? \trim(\trim($oResponse['headers']['etag']), '"\'') : ''); + $oContact->PopulateByVCard($aData['uid'], $sBody, + !empty($oResponse['headers']['etag']) ? \trim(\trim($oResponse['headers']['etag']), '"\'') : '', + $this->oLogger); $this->ContactSave($sEmail, $oContact); unset($oContact); diff --git a/rainloop/v/0.0.0/app/libraries/Sabre/DAV/Client.php b/rainloop/v/0.0.0/app/libraries/Sabre/DAV/Client.php index 0d771c8eb..e2831bf70 100644 --- a/rainloop/v/0.0.0/app/libraries/Sabre/DAV/Client.php +++ b/rainloop/v/0.0.0/app/libraries/Sabre/DAV/Client.php @@ -483,7 +483,7 @@ class Client { if ($mr > 0) { $newurl = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL); - + $rcurl = curl_copy_handle($curl); curl_setopt($rcurl, CURLOPT_HEADER, true); curl_setopt($rcurl, CURLOPT_NOBODY, true); @@ -512,7 +512,7 @@ class Client { } } } while ($code && --$mr); - + curl_close($rcurl); if ($mr > 0) { diff --git a/rainloop/v/0.0.0/app/templates/Views/User/MailFolderList.html b/rainloop/v/0.0.0/app/templates/Views/User/MailFolderList.html index 193c8ed0f..1e422c134 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/MailFolderList.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/MailFolderList.html @@ -12,9 +12,9 @@
-
+

-
+
diff --git a/rainloop/v/0.0.0/app/templates/Views/User/MailMessageView.html b/rainloop/v/0.0.0/app/templates/Views/User/MailMessageView.html index 2ea32ceb4..fc0ef83c5 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/MailMessageView.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/MailMessageView.html @@ -189,7 +189,8 @@ - + + @@ -218,9 +219,9 @@ - + data-bind="text: viewThreadsControlDesc">) !