Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into signatures
Browse files Browse the repository at this point in the history
  • Loading branch information
yunosh committed Oct 18, 2013
2 parents 2f0ca5a + 691d36f commit 5bff52a
Show file tree
Hide file tree
Showing 17 changed files with 652 additions and 339 deletions.
3 changes: 2 additions & 1 deletion framework/ActiveSync/lib/Horde/ActiveSync/State/Sql.php
Expand Up @@ -1489,7 +1489,8 @@ protected function _getPIMChangeTS($changes)
$values[] = $d;
}
}
$sql .= 'AND (' . explode('OR ', $conditions) . ') GROUP BY message_uid';

$sql .= 'AND (' . implode('OR ', $conditions) . ') GROUP BY message_uid';
try {
return $this->_db->selectAssoc($sql, $values);
} catch (Horde_Db_Exception $e) {
Expand Down
1 change: 0 additions & 1 deletion framework/Icalendar/package.xml
Expand Up @@ -3,7 +3,6 @@
<name>Horde_Icalendar</name>
<channel>pear.horde.org</channel>
<extends>Horde_iCalendar</extends>
<extends>iCalendar</extends>
<summary>iCalendar API</summary>
<description>An API for dealing with iCalendar data.</description>
<lead>
Expand Down
20 changes: 20 additions & 0 deletions framework/ListHeaders/lib/Horde/ListHeaders.php
Expand Up @@ -23,6 +23,26 @@
*/
class Horde_ListHeaders extends Horde_Mail_Rfc822
{
/**
* Returns the list of valid mailing list headers.
*
* @return array The list of valid mailing list headers.
*/
public function headers()
{
return array(
/* RFC 2369 */
'list-help' => Horde_ListHeaders_Translation::t("List-Help"),
'list-unsubscribe' => Horde_ListHeaders_Translation::t("List-Unsubscribe"),
'list-subscribe' => Horde_ListHeaders_Translation::t("List-Subscribe"),
'list-owner' => Horde_ListHeaders_Translation::t("List-Owner"),
'list-post' => Horde_ListHeaders_Translation::t("List-Post"),
'list-archive' => Horde_ListHeaders_Translation::t("List-Archive"),
/* RFC 2919 */
'list-id' => Horde_ListHeaders_Translation::t("List-Id")
);
}

/**
* Parse a list header.
*
Expand Down
57 changes: 57 additions & 0 deletions framework/ListHeaders/lib/Horde/ListHeaders/Translation.php
@@ -0,0 +1,57 @@
<?php
/**
* Copyright 2010-2013 Horde LLC (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.horde.org/licenses/lgpl21.
*
* @category Horde
* @copyright 2010-2013 Horde LLC
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @package ListHeaders
*/

/**
* Horde_ListHeaders_Translation is the translation wrapper class for
* Horde_ListHeaders.
*
* @author Jan Schneider <jan@horde.org>
* @category Horde
* @copyright 2010-2013 Horde LLC
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @package ListHeaders
*/
class Horde_ListHeaders_Translation extends Horde_Translation
{
/**
* Returns the translation of a message.
*
* @var string $message The string to translate.
*
* @return string The string translation, or the original string if no
* translation exists.
*/
static public function t($message)
{
self::$_domain = 'Horde_ListHeaders';
self::$_directory = '@data_dir@' == '@'.'data_dir'.'@' ? __DIR__ . '/../../../locale' : '@data_dir@/Horde_ListHeaders/locale';
return parent::t($message);
}

/**
* Returns the plural translation of a message.
*
* @param string $singular The singular version to translate.
* @param string $plural The plural version to translate.
* @param integer $number The number that determines singular vs. plural.
*
* @return string The string translation, or the original string if no
* translation exists.
*/
static public function ngettext($singular, $plural, $number)
{
self::$_domain = 'Horde_ListHeaders';
self::$_directory = '@data_dir@' == '@'.'data_dir'.'@' ? __DIR__ . '/../../../locale' : '@data_dir@/Horde_ListHeaders/locale';
return parent::ngettext($singular, $plural, $number);
}
}
46 changes: 46 additions & 0 deletions framework/ListHeaders/locale/Horde_ListHeaders.pot
@@ -0,0 +1,46 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Horde LLC (http://www.horde.org/)
# This file is distributed under the same license as the Horde_ListHeaders package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Horde_ListHeaders \n"
"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
"POT-Creation-Date: 2013-10-17 17:50-0600\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#: lib/Horde/ListHeaders.php:40
msgid "List-Archive"
msgstr ""

#: lib/Horde/ListHeaders.php:35
msgid "List-Help"
msgstr ""

#: lib/Horde/ListHeaders.php:42
msgid "List-Id"
msgstr ""

#: lib/Horde/ListHeaders.php:38
msgid "List-Owner"
msgstr ""

#: lib/Horde/ListHeaders.php:39
msgid "List-Post"
msgstr ""

#: lib/Horde/ListHeaders.php:37
msgid "List-Subscribe"
msgstr ""

#: lib/Horde/ListHeaders.php:36
msgid "List-Unsubscribe"
msgstr ""
32 changes: 23 additions & 9 deletions framework/ListHeaders/package.xml
Expand Up @@ -10,19 +10,18 @@
<email>slusarz@horde.org</email>
<active>yes</active>
</lead>
<date>2012-11-19</date>
<time>15:07:58</time>
<date>2013-10-17</date>
<version>
<release>1.0.2</release>
<api>1.0.0</api>
<release>1.1.0</release>
<api>1.1.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://www.horde.org/licenses/lgpl21">LGPL-2.1</license>
<notes>
*
* [mms] Add Horde_ListHeaders#headers().
</notes>
<contents>
<dir baseinstalldir="/" name="/">
Expand All @@ -40,10 +39,16 @@
<file name="Id.php" role="php" />
<file name="NoPost.php" role="php" />
<file name="Object.php" role="php" />
<file name="Translation.php" role="php">
<tasks:replace from="@data_dir@" to="data_dir" type="pear-config" />
</file>
</dir> <!-- /lib/Horde/ListHeaders -->
<file name="ListHeaders.php" role="php" />
</dir> <!-- /lib/Horde -->
</dir> <!-- /lib -->
<dir name="locale">
<file name="Horde_ListHeaders.pot" role="data" />
</dir> <!-- /locale -->
<dir name="test">
<dir name="Horde">
<dir name="ListHeaders">
Expand Down Expand Up @@ -71,6 +76,13 @@
<max>3.0.0alpha1</max>
<exclude>3.0.0alpha1</exclude>
</package>
<package>
<name>Horde_Translation</name>
<channel>pear.horde.org</channel>
<min>2.0.0</min>
<max>3.0.0alpha1</max>
<exclude>3.0.0alpha1</exclude>
</package>
</required>
<optional>
<package>
Expand All @@ -90,6 +102,8 @@
<install as="Horde/ListHeaders/Id.php" name="lib/Horde/ListHeaders/Id.php" />
<install as="Horde/ListHeaders/NoPost.php" name="lib/Horde/ListHeaders/NoPost.php" />
<install as="Horde/ListHeaders/Object.php" name="lib/Horde/ListHeaders/Object.php" />
<install as="Horde/ListHeaders/Translation.php" name="lib/Horde/ListHeaders/Translation.php" />
<install as="locale/Horde_ListHeaders.pot" name="locale/Horde_ListHeaders.pot" />
<install as="Horde/ListHeaders/AllTests.php" name="test/Horde/ListHeaders/AllTests.php" />
<install as="Horde/ListHeaders/bootstrap.php" name="test/Horde/ListHeaders/bootstrap.php" />
<install as="Horde/ListHeaders/ParseTest.php" name="test/Horde/ListHeaders/ParseTest.php" />
Expand Down Expand Up @@ -154,15 +168,15 @@
</release>
<release>
<version>
<release>1.0.2</release>
<api>1.0.0</api></version>
<release>1.1.0</release>
<api>1.1.0</api></version>
<stability>
<release>stable</release>
<api>stable</api></stability>
<date>2012-11-19</date>
<date>2013-10-17</date>
<license uri="http://www.horde.org/licenses/lgpl21">LGPL-2.1</license>
<notes>
*
* [mms] Add Horde_ListHeaders#headers().
</notes>
</release>
</changelog>
Expand Down
2 changes: 2 additions & 0 deletions framework/Mime/lib/Horde/Mime/Headers.php
Expand Up @@ -526,6 +526,8 @@ static public function mimeParamFields()
/**
* Returns the list of valid mailing list headers.
*
* @deprecated Use Horde_ListHeaders#headers() instead.
*
* @return array The list of valid mailing list headers.
*/
static public function listHeaders()
Expand Down
2 changes: 1 addition & 1 deletion framework/Timezone/lib/Horde/Timezone.php
Expand Up @@ -129,7 +129,7 @@ public function getZone($zone)
if (!isset($this->_zones[$alias])) {
throw new Horde_Timezone_Exception(sprintf('Timezone %s not found', $zone));
}
$this->_zones[$alias]->setTzid($alias);
$this->_zones[$alias]->setTzid($zone);
return $this->_zones[$alias];
}

Expand Down
59 changes: 41 additions & 18 deletions framework/Timezone/lib/Horde/Timezone/Rule.php
Expand Up @@ -96,6 +96,9 @@ public function addRules(Horde_Icalendar_Vtimezone $tz, $tzid, $name,
// FROM is not "minimum" and is after the searched period
break;
}
if ($rule[2][0] != 'm' && $rule[2] < $start->year) {
$rule[2] = $start->year;
}
if ($rule[8] == 0) {
$component = new Horde_Icalendar_Standard();
$component->setAttribute('TZOFFSETFROM', $offset);
Expand All @@ -108,11 +111,14 @@ public function addRules(Horde_Icalendar_Vtimezone $tz, $tzid, $name,
$component->setAttribute('TZOFFSETTO', $offset);
}
$month = Horde_Timezone::getMonth($rule[5]);
// Retrieve time of rule start.
preg_match('/(\d+)(?::(\d+))?(?::(\d+))?(w|s|u)?/', $rule[7], $match);
if (!isset($match[2])) {
$match[2] = 0;
}
if ($rule[2] == $rule[3] && preg_match('/^\d+$/', $rule[6])) {
if (!isset($match[2])) {
$match[2] = 0;
}
// Rule lasts only for a single year and starts on a specific
// date.
$rdate = new Horde_Date(
array('year' => $rule[2],
'month' => Horde_Timezone::getMonth($rule[5]),
Expand All @@ -122,11 +128,16 @@ public function addRules(Horde_Icalendar_Vtimezone $tz, $tzid, $name,
'sec' => 0));
$component->setAttribute('DTSTART', $rdate);
} elseif (substr($rule[6], 0, 4) == 'last') {
// Rule starts on the last of a certain weekday of the month.
$weekday = $this->_weekdays[substr($rule[6], 4, 3)];
$last = new Horde_Date(
$rule[2],
$month,
Horde_Date_Utils::daysInMonth($month, $rule[2]));
$last = new Horde_Date(array(
'year' => $rule[2],
'month' => $month,
'mday' => Horde_Date_Utils::daysInMonth($month, $rule[2]),
'hour' => $match[1],
'min' => $match[2],
'sec' => 0
));
while ($last->dayOfWeek() != $weekday) {
$last->mday--;
}
Expand Down Expand Up @@ -154,12 +165,18 @@ public function addRules(Horde_Icalendar_Vtimezone $tz, $tzid, $name,
. Horde_String::upper(substr($rule[6], 4, 2))
. ';BYMONTH=' . $month . $until);
} elseif (strpos($rule[6], '>=')) {
// Rule starts on a certain weekday after a certain day of
// month.
list($weekday, $day) = explode('>=', $rule[6]);
$weekdayInt = $this->_weekdays[substr($weekday, 0, 3)];
$first = new Horde_Date(
array('year' => $rule[2],
'month' => $month,
'mday' => $day));
$first = new Horde_Date(array(
'year' => $rule[2],
'month' => $month,
'mday' => $day,
'hour' => $match[1],
'min' => $match[2],
'sec' => 0
));
while ($first->dayOfWeek() != $weekdayInt) {
$first->mday++;
}
Expand All @@ -181,24 +198,30 @@ public function addRules(Horde_Icalendar_Vtimezone $tz, $tzid, $name,
$last->setTimezone('UTC');
$until = ';UNTIL=' . $last->format('Ymd\THIs') . 'Z';
}
for ($days = array(), $i = $day, $last = Horde_Date_Utils::daysInMonth($month, $rule[2]);
$i <= $last;
for ($days = array(), $i = $day, $lastDay = min(Horde_Date_Utils::daysInMonth($month, $rule[2]), $i + 6);
$day > 1 && $i <= $lastDay;
$i++) {
$days[] = $i;
}
$component->setAttribute(
'RRULE',
'FREQ=YEARLY;BYMONTH=' . $month
. ';BYMONTHDAY=' . implode(',', $days)
. ($days ? (';BYMONTHDAY=' . implode(',', $days)) : '')
. ';BYDAY=1' . Horde_String::upper(substr($weekday, 0, 2))
. $until);
} elseif (strpos($rule[6], '<=')) {
// Rule starts on a certain weekday before a certain day of
// month.
list($weekday, $day) = explode('>=', $rule[6]);
$weekdayInt = $this->_weekdays[substr($weekday, 0, 3)];
$last = new Horde_Date(
array('year' => $rule[2],
'month' => $month,
'mday' => $day));
$last = new Horde_Date(array(
'year' => $rule[2],
'month' => $month,
'mday' => $day,
'hour' => $match[1],
'min' => $match[2],
'sec' => 0
));
while ($last->dayOfWeek() != $weekdayInt) {
$last->mday--;
}
Expand Down
3 changes: 2 additions & 1 deletion framework/Timezone/lib/Horde/Timezone/Zone.php
Expand Up @@ -105,7 +105,9 @@ public function toVtimezone()
$component = new Horde_Icalendar_Daylight();
} else {
// Represented by a ruleset.
$startOffset = $this->_getOffset($i);
$this->_tz->getRule($this->_info[$i][1])->addRules($tz, $this->_name, $name, $startOffset, $startDate, $endDate);
$startDate = $endDate;
// Continue, because addRules() already adds the
// component to $tz.
continue;
Expand All @@ -115,7 +117,6 @@ public function toVtimezone()
$startOffset = $this->_getOffset($i);
$component->setAttribute('TZOFFSETTO', $startOffset);
$component->setAttribute('TZNAME', $name);
$startDate = $endDate;
$tz->addComponent($component);
}

Expand Down

0 comments on commit 5bff52a

Please sign in to comment.