Projects
Kolab:16:Enterprise
kolab-syncroton
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 40
View file
kolab-syncroton.spec
Changed
@@ -36,7 +36,7 @@ %global _ap_sysconfdir %{_sysconfdir}/%{httpd_name} Name: kolab-syncroton -Version: 2.3.19 +Version: 2.3.20 Release: 1%{?dist} Summary: ActiveSync for Kolab Groupware @@ -203,6 +203,9 @@ %attr(0770,%{httpd_user},%{httpd_group}) %{_var}/log/%{name} %changelog +* Fri Jul 02 2021 Jeroen van Meeuwen <vanmeeuwen@apheleia-it.ch> - 2.3.20-1 +- Release version 2.3.20 + * Thu Jan 28 2021 Christian Mollekopf <mollekopf@kolabsys.com> - 2.3.19-1 - Release version 2.3.19
View file
debian.changelog
Changed
@@ -1,3 +1,9 @@ +kolab-syncroton (2.3.20-0~kolab1) unstable; urgency=low + + * Release version 2.3.20 + + -- Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> Fri, 2 Jul 2021 15:13:40 +0200 + kolab-syncroton (2.3.19-0~kolab1) unstable; urgency=low * Release version 2.3.19
View file
kolab-syncroton-2.3.19.tar.gz/composer.json-dist -> kolab-syncroton-2.3.20.tar.gz/composer.json-dist
Changed
@@ -22,6 +22,6 @@ "zf1/zend-log": "~1.12.11" }, "require-dev": { - "phpunit/phpunit": "~4.4.0" + "phpunit/phpunit": "^4.8 || ^5.7 || ^6 || ^7" } }
View file
kolab-syncroton-2.3.19.tar.gz/config/config.inc.php.dist -> kolab-syncroton-2.3.20.tar.gz/config/config.inc.php.dist
Changed
@@ -118,6 +118,10 @@ $config'activesync_multifolder_blacklist_note' = null; $config'activesync_multifolder_blacklist_task' = null; +// Blacklist devices that can handle TNEF (winmail.dat) format email +// For all others we'll try to extract the contents as best as we can. +$config'activesync_tnef_blacklist' = array('windowsoutlook'); + // Enables adding sender name in the From: header of send email // when a device uses email address only (e.g. iOS devices) $config'activesync_fix_from' = false;
View file
kolab-syncroton-2.3.19.tar.gz/lib/ext/rtf.php -> kolab-syncroton-2.3.20.tar.gz/lib/ext/rtf.php
Changed
@@ -214,20 +214,20 @@ $flagCount = 0; $flags = 0; while ($out<$oblen) { - $flags = ($flagCount++ % 8 == 0) ? ord($src{$in++}) : $flags >> 1; + $flags = ($flagCount++ % 8 == 0) ? ord($src$in++) : $flags >> 1; if (($flags & 1) == 1) { - $offset = ord($src{$in++}); - $length = ord($src{$in++}); + $offset = ord($src$in++); + $length = ord($src$in++); $offset = ($offset << 4) | ($length >> 4); $length = ($length & 0xF) + 2; $offset = (int)($out / 4096) * 4096 + $offset; if ($offset >= $out) $offset -= 4096; $end = $offset + $length; while ($offset < $end) { - $dst{$out++} = $dst{$offset++}; + $dst$out++ = $dst$offset++; }; } else { - $dst{$out++} = $src{$in++}; + $dst$out++ = $src$in++; } } $src = $dst; @@ -249,7 +249,7 @@ $c=0; $end = $off + $len; for($i=$off;$i < $end;$i++) { - $c=$this->CRC32_TABLE($c ^ ord($buf{$i})) & 0xFF ^ (($c >> 8) & 0x00ffffff); + $c=$this->CRC32_TABLE($c ^ ord($buf$i)) & 0xFF ^ (($c >> 8) & 0x00ffffff); } return $c; }
View file
kolab-syncroton-2.3.19.tar.gz/lib/kolab_sync_data_calendar.php -> kolab-syncroton-2.3.20.tar.gz/lib/kolab_sync_data_calendar.php
Changed
@@ -894,14 +894,14 @@ } } - if ($value && $value instanceof DateTime) { - if ($event'start' && ($interval = $event'start'->diff($value))) { + if (!empty($value) && $value instanceof DateTime) { + if (!empty($event'start') && ($interval = $event'start'->diff($value))) { if ($interval->invert && !$interval->m && !$interval->y) { return intval(round($interval->s/60) + $interval->i + $interval->h * 60 + $interval->d * 60 * 24); } } } - else if ($value && preg_match('/^(-+*)PT*(0-9+)(WDHMS)$/', $value, $matches)) { + else if (!empty($value) && preg_match('/^(-+*)PT*(0-9+)(WDHMS)$/', $value, $matches)) { $value = intval($matches2); if ($value && $matches1 != '-') { @@ -925,7 +925,7 @@ protected function to_kolab_alarm($value, $event) { if ($value === null || $value === '') { - return (array) $event'valarms'; + return isset($event'valarms') ? (array) $event'valarms' : array(); } $valarms = array(); @@ -943,8 +943,8 @@ } $valarms = array( - 'action' => $current'action' ?: 'DISPLAY', - 'description' => $current'description' ?: '', + 'action' => !empty($current'action') ? $current'action' : 'DISPLAY', + 'description' => !empty($current'description') ? $current'description' : '', 'trigger' => sprintf('-PT%dM', $value), );
View file
kolab-syncroton-2.3.19.tar.gz/lib/kolab_sync_data_email.php -> kolab-syncroton-2.3.20.tar.gz/lib/kolab_sync_data_email.php
Changed
@@ -112,6 +112,14 @@ if ($this->asversion >= 14) { $this->tag_categories = true; } + + // Disable TNEF (winmail.dat) decoding, e.g. Outlook knows best how to handle it + $config = rcube::get_instance()->config; + $blacklist = $config->get('activesync_tnef_blacklist', array('windowsoutlook')); + + if (is_array($blacklist) && $this->deviceTypeFilter($blacklist)) { + $config->set('tnef_decode', false); + } } /**
View file
kolab-syncroton-2.3.19.tar.gz/lib/kolab_sync_message.php -> kolab-syncroton-2.3.20.tar.gz/lib/kolab_sync_message.php
Changed
@@ -193,75 +193,39 @@ // remove empty headers $headers = array_filter($headers); - // send thru SMTP server using custom SMTP library - if ($rcube->config->get('smtp_server')) { - $smtp_headers = $headers; - // generate list of recipients - $recipients = array(); - - if (!empty($headers'To')) - $recipients = $headers'To'; - if (!empty($headers'Cc')) - $recipients = $headers'Cc'; - if (!empty($headers'Bcc')) - $recipients = $headers'Bcc'; - - // remove Bcc header - unset($smtp_headers'Bcc'); - - // send message - if (!is_object($rcube->smtp)) { - $rcube->smtp_init(true); - } + $smtp_headers = $headers; - $sent = $rcube->smtp->send_mail($headers'From', $recipients, $smtp_headers, $this->body, $smtp_opts); - $smtp_response = $rcube->smtp->get_response(); - $smtp_error = $rcube->smtp->get_error(); + // generate list of recipients + $recipients = array(); - // log error - if (!$sent) { - rcube::raise_error(array('code' => 800, 'type' => 'smtp', - 'line' => __LINE__, 'file' => __FILE__, - 'message' => "SMTP error: ".join("\n", $smtp_response)), true, false); - } + if (!empty($headers'To')) + $recipients = $headers'To'; + if (!empty($headers'Cc')) + $recipients = $headers'Cc'; + if (!empty($headers'Bcc')) + $recipients = $headers'Bcc'; + + if (empty($headers'To') && empty($headers'Cc')) { + $headers'To' = 'undisclosed-recipients:;'; } - // send mail using PHP's mail() function - else { - $mail_headers = $headers; - $delim = $rcube->config->header_delimiter(); - $subject = $headers'Subject'; - $to = $headers'To'; - - // unset some headers because they will be added by the mail() function - unset($mail_headers'To', $mail_headers'Subject'); - - // #1485779 - if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { - if (preg_match_all('/<(^@+@^>+)>/', $to, $m)) { - $to = implode(', ', $m1); - } - } - foreach ($mail_headers as $header => $header_value) { - $mail_headers$header = $header . ': ' . $header_value; - } - $header_str = rtrim(implode("\r\n", $mail_headers)); + // remove Bcc header + unset($smtp_headers'Bcc'); - if ($delim != "\r\n") { - $header_str = str_replace("\r\n", $delim, $header_str); - $msg_body = str_replace("\r\n", $delim, $this->body); - $to = str_replace("\r\n", $delim, $to); - $subject = str_replace("\r\n", $delim, $subject); - } + // send message + if (!is_object($rcube->smtp)) { + $rcube->smtp_init(true); + } - if (ini_get('safe_mode')) { - $sent = mail($to, $subject, $msg_body, $header_str); - } - else { - $from = rcube_mime::decode_address_list($headers'From', 1, false, null, true); - $from = $from0; - $sent = mail($to, $subject, $msg_body, $header_str, "-f$from"); - } + $sent = $rcube->smtp->send_mail($headers'From', $recipients, $smtp_headers, $this->body, $smtp_opts); + $smtp_response = $rcube->smtp->get_response(); + $smtp_error = $rcube->smtp->get_error(); + + // log error + if (!$sent) { + rcube::raise_error(array('code' => 800, 'type' => 'smtp', + 'line' => __LINE__, 'file' => __FILE__, + 'message' => "SMTP error: ".join("\n", $smtp_response)), true, false); } if ($sent) { @@ -270,25 +234,20 @@ // remove MDN headers after sending unset($headers'Return-Receipt-To', $headers'Disposition-Notification-To'); - // get all recipients - if ($headers'Cc') - $mailto .= ' ' . $headers'Cc'; - if ($headers'Bcc') - $mailto .= ' ' . $headers'Bcc'; - if (preg_match_all('/<(^@+@^>+)>/', $mailto, $m)) - $mailto = implode(', ', array_unique($m1)); - if ($rcube->config->get('smtp_log')) { - rcube::write_log('sendmail', sprintf("User %s %s; Message for %s; %s", + // get all recipient addresses + $mailto = rcube_mime::decode_address_list(implode(',', $recipients), null, false, null, true); + + rcube::write_log('sendmail', sprintf("User %s %s; Message %s for %s; %s", $rcube->get_user_name(), - $_SERVER'REMOTE_ADDR', - $mailto, - !empty($smtp_response) ? join('; ', $smtp_response) : '')); + rcube_utils::remote_addr(), + $headers'Message-ID', + implode(', ', $mailto), + !empty($smtp_response) ? implode('; ', $smtp_response) : '') + ); } } - unset($headers'Bcc'); - $this->headers = $headers; return $sent; @@ -327,7 +286,7 @@ } // single part - $enc = strtolower($hdrs'Content-Transfer-Encoding'); + $enc = !empty($hdrs'Content-Transfer-Encoding') ? strtolower($hdrs'Content-Transfer-Encoding') : null; // do nothing if already encoded if ($enc != 'quoted-printable' && $enc != 'base64') {
View file
kolab-syncroton-2.3.19.tar.gz/lib/kolab_sync_timezone_converter.php -> kolab-syncroton-2.3.20.tar.gz/lib/kolab_sync_timezone_converter.php
Changed
@@ -284,7 +284,7 @@ for ($i=5; $i>0; $i--) { if ($this->_isNthOcurrenceOfWeekdayInMonth($transitionDate, $i)) { - $_offsets$_type . 'Day' = $i; + $_offsets$_type . 'Week' = $i; break; }; } @@ -351,7 +351,7 @@ $standardOffset = ($_offsets'bias' + $_offsets'standardBias') * 60 * -1; // check each condition in a single if statement and break the chain when one condition is not met - for performance reasons - if ($standardOffset == $_standardTransition'offset' ) { + if ($standardOffset == $_standardTransition'offset') { if (empty($_offsets'daylightMonth') && (empty($_daylightTransition) || empty($_daylightTransition'isdst'))) { // No DST @@ -363,17 +363,24 @@ // the milestone is sending a positive value for daylightBias while it should send a negative value $daylightOffsetMilestone = ($_offsets'bias' + ($_offsets'daylightBias' * -1) ) * 60 * -1; - if ($daylightOffset == $_daylightTransition'offset' || $daylightOffsetMilestone == $_daylightTransition'offset') { - $standardDate = new DateTime($_standardTransition'time', $tz); - $daylightDate = new DateTime($_daylightTransition'time', $tz); + if ( + !empty($_daylightTransition) + && ($daylightOffset == $_daylightTransition'offset' || $daylightOffsetMilestone == $_daylightTransition'offset') + ) { + // date-time input here contains UTC timezone specifier (+0000), + // we have to convert the date to the requested timezone afterwards. + $standardDate = new DateTime($_standardTransition'time'); + $daylightDate = new DateTime($_daylightTransition'time'); + $standardDate->setTimezone($tz); + $daylightDate->setTimezone($tz); if ($standardDate->format('n') == $_offsets'standardMonth' && $daylightDate->format('n') == $_offsets'daylightMonth' && $standardDate->format('w') == $_offsets'standardDayOfWeek' && $daylightDate->format('w') == $_offsets'daylightDayOfWeek' ) { - return $this->_isNthOcurrenceOfWeekdayInMonth($daylightDate, $_offsets'daylightDay') && - $this->_isNthOcurrenceOfWeekdayInMonth($standardDate, $_offsets'standardDay'); + return $this->_isNthOcurrenceOfWeekdayInMonth($daylightDate, $_offsets'daylightWeek') && + $this->_isNthOcurrenceOfWeekdayInMonth($standardDate, $_offsets'standardWeek'); } } } @@ -389,10 +396,20 @@ */ protected function _unpackTimezoneInfo($_packedTimezoneInfo) { - $timezoneUnpackString = 'lbias/a64standardName/vstandardYear/vstandardMonth/vstandardDayOfWeek/vstandardDay/vstandardHour/vstandardMinute/vstandardSecond/vstandardMilliseconds/lstandardBias/a64daylightName/vdaylightYear/vdaylightMonth/vdaylightDayOfWeek/vdaylightDay/vdaylightHour/vdaylightMinute/vdaylightSecond/vdaylightMilliseconds/ldaylightBias'; + $timezoneUnpackString = 'lbias/a64standardName/vstandardYear/vstandardMonth/vstandardDayOfWeek/vstandardWeek/vstandardHour/vstandardMinute/vstandardSecond/vstandardMilliseconds/lstandardBias' + . '/a64daylightName/vdaylightYear/vdaylightMonth/vdaylightDayOfWeek/vdaylightWeek/vdaylightHour/vdaylightMinute/vdaylightSecond/vdaylightMilliseconds/ldaylightBias'; $timezoneInfo = unpack($timezoneUnpackString, base64_decode($_packedTimezoneInfo)); + if ($timezoneInfo'standardHour' == 23 && $timezoneInfo'standardMilliseconds' == 999 + && $timezoneInfo'standardMinute' == 59 && $timezoneInfo'standardSecond' == 59 + ) { + $timezoneInfo'standardHour' = 24; + $timezoneInfo'standardMinute' = 0; + $timezoneInfo'standardSecond' = 0; + $timezoneInfo'standardMilliseconds' = 0; + } + return $timezoneInfo; } @@ -408,6 +425,16 @@ return null; } + // According to e.g. https://docs.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-systemtime, + // 24 is not allowed in the Hour field, and consequently Outlook can't deal with it. + // This is the same workaround that Outlook applies. + if ($_timezoneInfo'standardHour' == 24) { + $_timezoneInfo'standardHour' = 23; + $_timezoneInfo'standardMinute' = 59; + $_timezoneInfo'standardSecond' = 59; + $_timezoneInfo'standardMilliseconds' = 999; + } + $packed = pack( "la64vvvvvvvvla64vvvvvvvvl", $_timezoneInfo'bias', @@ -415,7 +442,7 @@ $_timezoneInfo'standardYear', $_timezoneInfo'standardMonth', $_timezoneInfo'standardDayOfWeek', - $_timezoneInfo'standardDay', + $_timezoneInfo'standardWeek', $_timezoneInfo'standardHour', $_timezoneInfo'standardMinute', $_timezoneInfo'standardSecond', @@ -425,7 +452,7 @@ $_timezoneInfo'daylightYear', $_timezoneInfo'daylightMonth', $_timezoneInfo'daylightDayOfWeek', - $_timezoneInfo'daylightDay', + $_timezoneInfo'daylightWeek', $_timezoneInfo'daylightHour', $_timezoneInfo'daylightMinute', $_timezoneInfo'daylightSecond', @@ -452,7 +479,7 @@ 'standardYear' => 0, 'standardMonth' => 0, 'standardDayOfWeek' => 0, - 'standardDay' => 0, + 'standardWeek' => 0, 'standardHour' => 0, 'standardMinute' => 0, 'standardSecond' => 0, @@ -462,7 +489,7 @@ 'daylightYear' => 0, 'daylightMonth' => 0, 'daylightDayOfWeek' => 0, - 'daylightDay' => 0, + 'daylightWeek' => 0, 'daylightHour' => 0, 'daylightMinute' => 0, 'daylightSecond' => 0, @@ -481,8 +508,8 @@ protected function _validateOffsets($value) { // validate $value - if ((!empty($value'standardMonth') || !empty($value'standardDay') || !empty($value'daylightMonth') || !empty($value'daylightDay')) && - (empty($value'standardMonth') || empty($value'standardDay') || empty($value'daylightMonth') || empty($value'daylightDay')) + if ((!empty($value'standardMonth') || !empty($value'standardWeek') || !empty($value'daylightMonth') || !empty($value'daylightWeek')) && + (empty($value'standardMonth') || empty($value'standardWeek') || empty($value'daylightMonth') || empty($value'daylightWeek')) ) { // It is not possible not set standard offsets without setting daylight offsets and vice versa return false; @@ -617,7 +644,7 @@ protected function _loadFromCache($key) { - if ($cache = $this->getCache) { + if ($cache = $this->getCache()) { return $cache->get($key); } @@ -626,7 +653,7 @@ protected function _saveInCache($value, $key) { - if ($cache = $this->getCache) { + if ($cache = $this->getCache()) { $cache->set($key, $value); } }
View file
kolab-syncroton-2.3.19.tar.gz/tests/body_converter.php -> kolab-syncroton-2.3.20.tar.gz/tests/body_converter.php
Changed
@@ -1,6 +1,6 @@ <?php -class body_converter extends PHPUnit_Framework_TestCase +class body_converter extends PHPUnit\Framework\TestCase { function setUp() {
View file
kolab-syncroton-2.3.19.tar.gz/tests/data.php -> kolab-syncroton-2.3.20.tar.gz/tests/data.php
Changed
@@ -1,6 +1,6 @@ <?php -class data extends PHPUnit_Framework_TestCase +class data extends PHPUnit\Framework\TestCase { /** * Test for kolab_sync_data::recurrence_to_kolab()
View file
kolab-syncroton-2.3.19.tar.gz/tests/data_calendar.php -> kolab-syncroton-2.3.20.tar.gz/tests/data_calendar.php
Changed
@@ -1,6 +1,6 @@ <?php -class data_calendar extends PHPUnit_Framework_TestCase +class data_calendar extends PHPUnit\Framework\TestCase { /** * Test for kolab_sync_data_calendar::from_kolab_alarm()
View file
kolab-syncroton-2.3.19.tar.gz/tests/data_tasks.php -> kolab-syncroton-2.3.20.tar.gz/tests/data_tasks.php
Changed
@@ -1,6 +1,6 @@ <?php -class data_tasks extends PHPUnit_Framework_TestCase +class data_tasks extends PHPUnit\Framework\TestCase { function data_prio() {
View file
kolab-syncroton-2.3.19.tar.gz/tests/message.php -> kolab-syncroton-2.3.20.tar.gz/tests/message.php
Changed
@@ -1,6 +1,6 @@ <?php -class message extends PHPUnit_Framework_TestCase +class message extends PHPUnit\Framework\TestCase { function setUp() {
View file
kolab-syncroton-2.3.19.tar.gz/tests/timezone_converter.php -> kolab-syncroton-2.3.20.tar.gz/tests/timezone_converter.php
Changed
@@ -1,6 +1,6 @@ <?php -class timezone_converter extends PHPUnit_Framework_TestCase +class timezone_converter extends PHPUnit\Framework\TestCase { function setUp() { @@ -9,14 +9,13 @@ function test_list_timezones() { - date_default_timezone_set('America/Los_Angeles'); +// date_default_timezone_set('America/Los_Angeles'); $converter = timezone_converter_test::getInstance(); - - $input = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAEAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAFAAEAAAAAAAAAxP///w=='; - $output = $converter->getListOfTimezones($input); + $output = $converter->getListOfTimezones('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAEAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAFAAEAAAAAAAAAxP///w=='); $this->assertTrue(is_array($output)); + $this->assertSame(array(), $output); $converter = timezone_converter_test::getInstance(); $output = $converter->getListOfTimezones('xP///0MAZQBuAHQAcgBhAGwAIABFAHUAcgBvAHAAZQAgAFMAdABhAG4AZABhAHIAZAAgAFQAaQBtAGUAAAAAAAAAAAAAAAoAAAAFAAMAAAAAAAAAAAAAAEMAZQBuAHQAcgBhAGwAIABFAHUAcgBvAHAAZQAgAEQAYQB5AGwAaQBnAGgAdAAgAFQAaQBtAGUAAAAAAAAAAAAAAAMAAAAFAAIAAAAAAAAAxP///w=='); @@ -29,6 +28,12 @@ $this->assertTrue(is_array($output)); $this->assertTrue(isset($output'America/Los_Angeles')); + + $converter = timezone_converter_test::getInstance(); + $output = $converter->getListOfTimezones('Lv///0kAcgBhAG4AIABTAHQAYQBuAGQAYQByAGQAIABUAGkAbQBlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAgADABcAOwA7AOcDAAAAAEkAcgBhAG4AIABEAGEAeQBsAGkAZwBoAHQAIABUAGkAbQBlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAQAEAAAAAAAAAAAAxP///w=='); + + $this->assertTrue(is_array($output)); + $this->assertTrue(isset($output'Asia/Tehran')); } function test_get_timezone() @@ -73,11 +78,11 @@ $this->assertSame($output'standardBias', 0); $this->assertSame($output'standardMonth', 10); - $this->assertSame($output'standardDay', 5); + $this->assertSame($output'standardWeek', 5); $this->assertSame($output'standardHour', 3); $this->assertSame($output'daylightBias', -60); $this->assertSame($output'daylightMonth', 3); - $this->assertSame($output'daylightDay', 5); + $this->assertSame($output'daylightWeek', 5); $this->assertSame($output'daylightHour', 2); $output = $converter->getOffsetsForTimezone('America/Los_Angeles', $datetime); @@ -85,11 +90,11 @@ $this->assertSame($output'bias', 480); $this->assertSame($output'standardBias', 0); $this->assertSame($output'standardMonth', 11); - $this->assertSame($output'standardDay', 1); + $this->assertSame($output'standardWeek', 1); $this->assertSame($output'standardHour', 2); $this->assertSame($output'daylightBias', -60); $this->assertSame($output'daylightMonth', 3); - $this->assertSame($output'daylightDay', 2); + $this->assertSame($output'daylightWeek', 2); $this->assertSame($output'daylightHour', 2); $output = $converter->getOffsetsForTimezone('Atlantic/Azores', $datetime); @@ -97,13 +102,53 @@ $this->assertSame($output'bias', 60); $this->assertSame($output'standardBias', 0); $this->assertSame($output'standardMonth', 10); - $this->assertSame($output'standardDay', 5); + $this->assertSame($output'standardWeek', 5); $this->assertSame($output'standardHour', 1); $this->assertSame($output'daylightBias', -60); $this->assertSame($output'daylightMonth', 3); - $this->assertSame($output'daylightDay', 5); + $this->assertSame($output'daylightWeek', 5); + $this->assertSame($output'daylightHour', 0); + + $output = $converter->getOffsetsForTimezone('Asia/Tehran', $datetime); + + $this->assertSame($output'bias', -210); + $this->assertSame($output'standardBias', 0); + $this->assertSame($output'standardMonth', 9); + $this->assertSame($output'standardWeek', 3); + $this->assertSame($output'standardDayOfWeek', 2); + $this->assertSame($output'standardHour', 24); + $this->assertSame($output'daylightBias', -60); + $this->assertSame($output'daylightMonth', 3); + $this->assertSame($output'daylightWeek', 4); + $this->assertSame($output'daylightDayOfWeek', 1); $this->assertSame($output'daylightHour', 0); } + + function data_timezone_conversion() + { + return array( + array('Asia/Tehran', 'Lv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAgADABcAOwA7AOcDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAQAEAAAAAAAAAAAAxP///w=='), + array('Pacific/Pago_Pago', 'lAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='), + array('Europe/Warsaw', 'xP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAFAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAFAAIAAAAAAAAAxP///w=='), + ); + } + + /** + * @dataProvider data_timezone_conversion + */ + function test_timezone_conversion($tz, $expected) + { + $datetime = new DateTime('2021-07-01T12:00:00Z'); + $converter = timezone_converter_test::getInstance(); + $output = $converter->encodeTimezone($tz, $datetime); + + $this->assertSame($expected, $output); + + $output = $converter->getListOfTimezones($output); + + $this->assertTrue(is_array($output)); + $this->assertTrue(isset($output$tz)); + } } class timezone_converter_test extends kolab_sync_timezone_converter
View file
kolab-syncroton.dsc
Changed
@@ -2,7 +2,7 @@ Source: kolab-syncroton Binary: kolab-syncroton Architecture: all -Version: 2.3.19-0~kolab1 +Version: 2.3.20-0~kolab1 Maintainer: Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> Uploaders: Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> Homepage: http://www.kolab.org/ @@ -12,5 +12,5 @@ Package-List: kolab-syncroton deb utils extra Files: - 00000000000000000000000000000000 0 kolab-syncroton-2.3.19.tar.gz + 00000000000000000000000000000000 0 kolab-syncroton-2.3.20.tar.gz 00000000000000000000000000000000 0 debian.tar.gz
View file
plesk.kolab_syncroton.inc.php
Changed
@@ -3,7 +3,7 @@ // This file lists all ActiveSync-related configuration options // Enables ActiveSync protocol debuging -$config'activesync_debug' = true; +$config'activesync_debug' = false; // If specified all ActiveSync-related logs will be saved to this file // Note: This doesn't change Roundcube Framework log locations
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.