本文整理汇总了PHP中Horde_String::upper方法的典型用法代码示例。如果您正苦于以下问题:PHP Horde_String::upper方法的具体用法?PHP Horde_String::upper怎么用?PHP Horde_String::upper使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Horde_String
的用法示例。
在下文中一共展示了Horde_String::upper方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: create
/**
* Factory for a log object. Attempts to create a device specific file if
* custom logging is requested.
*
* @param array $properties The property array.
*
* @return Horde_Log_Logger The logger object, correctly configured.
*/
public function create($properties = array())
{
global $conf;
$logger = false;
if ($conf['activesync']['logging']['type'] == 'onefile') {
if (!empty($properties['DeviceId'])) {
$device_id = $properties['DeviceId'];
$format = "%timestamp% {$device_id} %levelName%: %message%" . PHP_EOL;
$formatter = new Horde_Log_Formatter_Simple(array('format' => $format));
$stream = fopen($conf['activesync']['logging']['path'], 'a');
if ($stream) {
$logger = new Horde_Log_Logger(new Horde_Log_Handler_Stream($stream, false, $formatter));
}
}
} elseif ($conf['activesync']['logging']['type'] == 'perdevice') {
if (!empty($properties['DeviceId'])) {
$stream = fopen($conf['activesync']['logging']['path'] . '/' . Horde_String::upper($properties['DeviceId']) . '.txt', 'a');
if ($stream) {
$logger = new Horde_Log_Logger(new Horde_Log_Handler_Stream($stream));
}
}
}
if (!$logger) {
$logger = new Horde_Log_Logger(new Horde_Log_Handler_Null());
}
return $logger;
}
示例2: auth
/**
* Attempt to do LMTP authentication.
*
* @param string The userid to authenticate as.
* @param string The password to authenticate with.
* @param string The requested authentication method. If none is
* specified, the best supported method will be used.
*
* @return mixed Returns a PEAR_Error with an error message on any
* kind of failure, or true on success.
* @access public
*/
function auth($uid, $pwd, $method = '')
{
if (!isset($this->_esmtp['STARTTLS'])) {
return PEAR::raiseError('LMTP server does not support authentication');
}
if (PEAR::isError($result = $this->_put('STARTTLS'))) {
return $result;
}
if (PEAR::isError($result = $this->_parseResponse(220))) {
return $result;
}
if (PEAR::isError($result = $this->_socket->enableCrypto(true, STREAM_CRYPTO_METHOD_TLS_CLIENT))) {
return $result;
} elseif ($result !== true) {
return PEAR::raiseError('STARTTLS failed');
}
/* Send LHLO again to recieve the AUTH string from the LMTP server. */
$this->_negotiate();
if (empty($this->_esmtp['AUTH'])) {
return PEAR::raiseError('LMTP server does not support authentication');
}
/*
* If no method has been specified, get the name of the best supported
* method advertised by the LMTP server.
*/
if (empty($method) || $method === true) {
if (PEAR::isError($method = $this->_getBestAuthMethod())) {
/* Return the PEAR_Error object from _getBestAuthMethod(). */
return $method;
}
} else {
$method = Horde_String::upper($method);
}
switch ($method) {
case 'DIGEST-MD5':
$result = $this->_authDigest_MD5($uid, $pwd);
break;
case 'CRAM-MD5':
$result = $this->_authCRAM_MD5($uid, $pwd);
break;
case 'LOGIN':
$result = $this->_authLogin($uid, $pwd);
break;
case 'PLAIN':
$result = $this->_authPlain($uid, $pwd);
break;
default:
$result = new PEAR_Error("{$method} is not a supported authentication method");
break;
}
/* If an error was encountered, return the PEAR_Error object. */
if (PEAR::isError($result)) {
return $result;
}
/* RFC-2554 requires us to re-negotiate ESMTP after an AUTH. */
if (PEAR::isError($error = $this->_negotiate())) {
return $error;
}
return true;
}
示例3: __construct
/**
* Constructor.
*
* Global constants defined:
* - [APPNAME]_TEMPLATES - (string) Location of template files.
*
* @param string $app Application identifier.
*/
public final function __construct($app)
{
$this->_app = $app;
$appname = Horde_String::upper($app);
if (!defined($appname . '_TEMPLATES')) {
define($appname . '_TEMPLATES', $GLOBALS['registry']->get('templates', $app));
}
$this->_bootstrap();
}
示例4: _setup
/**
*
*/
protected function _setup()
{
parent::_setup();
$view = $this->getView();
$view->addTemplatePath(array($GLOBALS['fs_base'] . '/app/views/App', $GLOBALS['fs_base'] . '/app/views/App/apps/' . $this->_matchDict->app));
$view->appname = $this->_matchDict->app;
$view->hasAuthors = file_exists($GLOBALS['fs_base'] . '/app/views/App/apps/' . $this->_matchDict->app . '/appauthors.html.php');
$view->hasDocs = file_exists($GLOBALS['fs_base'] . '/app/views/App/apps/' . $this->_matchDict->app . '/docs');
$view->hasScreenshots = file_exists($GLOBALS['fs_base'] . '/app/views/App/apps/' . $this->_matchDict->app . '/appscreenshots.html.php');
$view->hasRoadmap = file_exists($GLOBALS['fs_base'] . '/app/views/App/apps/' . $this->_matchDict->app . '/approadmap.html.php');
// @TODO: Look this up in some kind of config/lookup array.
$view->appnameHuman = in_array($this->_matchDict->app, array('imp', 'mimp', 'dimp')) ? Horde_String::upper($this->_matchDict->app) : Horde_String::ucfirst($this->_matchDict->app);
}
示例5: parse
/**
* Parses a keyword expression.
*
* @param string $column This is the SQL field name the resulting
* expression should test against.
* @param string $expr This is the keyword expression we want to parse.
*
* @return string The query expression.
* @throws Horde_Db_Exception
*/
public static function parse($column, $expr)
{
/* First pass - scan the string for tokens. Bare words are tokens, or
* the user can quote strings to have embedded spaces, keywords, or
* parentheses. Parentheses can be used for grouping boolean
* operators, and the boolean operators AND, OR, and NOT are all
* recognized.
*
* The tokens are returned in the $tokens array -- an array of strings.
* Each string in the array starts with either a `!' or a `='. `=' is
* a bare word or quoted string we are searching for, and `!' indicates
* a boolean operator or parenthesis. A token that starts with a '.'
* indicates a PostgreSQL word boundary search. */
$tokens = array();
while (!empty($expr)) {
$expr = preg_replace('/^\\s+/', '', $expr);
if (empty($expr)) {
break;
}
if (substr($expr, 0, 1) == '(') {
$expr = substr($expr, 1);
$token = '!(';
} elseif (substr($expr, 0, 1) == ')') {
$expr = substr($expr, 1);
$token = '!)';
} elseif (substr($expr, 0, 1) == ',') {
$expr = substr($expr, 1);
$token = '!OR';
} elseif (preg_match('/^(AND|OR|NOT)([^a-z].*)?$/i', $expr, $matches)) {
$token = '!' . Horde_String::upper($matches[1]);
$expr = substr($expr, strlen($matches[1]));
} elseif (preg_match('/^"(([^"]|\\[0-7]+|\\[Xx][0-9a-fA-F]+|\\[^Xx0-7])*)"/', $expr, $matches)) {
$token = '=' . stripcslashes($matches[1]);
$expr = substr($expr, strlen($matches[0]));
} elseif (preg_match('/^[^\\s\\(\\),]+/', $expr, $matches)) {
$token = '=' . $matches[0];
$expr = substr($expr, strlen($token) - 1);
} else {
throw new Horde_Db_Exception('Syntax error in search terms');
}
if ($token == '!AND') {
/* !AND is implied by concatenation. */
continue;
}
$tokens[] = $token;
}
/* Call the expression parser. */
return self::_parseKeywords1($column, $tokens);
}
示例6: _changePassword
/**
*/
protected function _changePassword($user, $oldpass, $newpass)
{
parent::_changePassword($user, $oldpass, $newpass);
// Get existing user information.
$entry = $this->_ldap->getEntry($this->_userdn);
// Return if the user is not a Samba user.
if (!in_array($this->_params['smb_objectclass'], $entry->getValue('objectClass', 'all'))) {
return;
}
// Crypt_CHAP is not PSR-0 compatible.
require_once 'Crypt/CHAP.php';
$hash = new Crypt_CHAP_MSv2();
$hash->password = $newpass;
$lmpasswd = Horde_String::upper(bin2hex($hash->lmPasswordHash()));
$ntpasswd = Horde_String::upper(bin2hex($hash->ntPasswordHash()));
$settime = time();
if (!is_null($this->_params['pw_expire_time'])) {
// 24 hours/day * 60 min/hour * 60 secs/min = 86400 seconds/day
$expiretime = $settime + $this->_params['pw_expire_time'] * 86400;
} else {
// This is NT's version of infinity time:
// http://lists.samba.org/archive/samba/2004-January/078175.html
$expiretime = 2147483647;
}
// All changes must succeed or fail together. Attributes with
// null name are not updated.
$changes = array();
if (!is_null($this->_params['lm_attribute'])) {
$changes[$this->_params['lm_attribute']] = $lmpasswd;
}
if (!is_null($this->_params['nt_attribute'])) {
$changes[$this->_params['nt_attribute']] = $ntpasswd;
}
if (!is_null($this->_params['pw_set_attribute'])) {
$changes[$this->_params['pw_set_attribute']] = $settime;
}
if (!is_null($this->_params['pw_expire_attribute'])) {
$changes[$this->_params['pw_expire_attribute']] = $expiretime;
}
if (count($changes) > 0) {
try {
$entry->replace($changes, true);
$entry->update();
} catch (Horde_Ldap_Exception $e) {
throw new Passwd_Exception($e);
}
}
}
示例7: enable
/**
* Set a capability as enabled/disabled.
*
* @param array $capability A capability (+ parameter).
* @param boolean $enable If true, enables the capability.
*/
public function enable($capability, $enable = true)
{
$capability = Horde_String::upper($capability);
$enabled = $this->isEnabled($capability);
if ($enable && !$enabled) {
switch ($capability) {
case 'QRESYNC':
/* RFC 7162 [3.2.3] - Enabling QRESYNC also implies enabling
* of CONDSTORE. */
$this->enable('CONDSTORE');
break;
}
$this->_enabled[] = $capability;
$this->notify();
} elseif (!$enable && $enabled) {
$this->_enabled = array_diff($this->_enabled, array($capability));
$this->notify();
}
}
示例8: create
/**
* Factory for a log object. Attempts to create a device specific file if
* custom logging is requested.
*
* @param array $properties The property array.
*
* @return Horde_Log_Logger The logger object, correctly configured.
*/
public function create($properties = array())
{
global $conf;
$logger = false;
switch ($conf['activesync']['logging']['type']) {
case 'onefile':
if (!empty($properties['DeviceId'])) {
$device_id = Horde_String::upper($properties['DeviceId']);
$format = "%timestamp% {$device_id} %levelName%: %message%" . PHP_EOL;
$formatter = new Horde_Log_Formatter_Simple(array('format' => $format));
$stream = fopen($conf['activesync']['logging']['path'], 'a');
if ($stream) {
$logger = new Horde_Log_Logger(new Horde_Log_Handler_Stream($stream, false, $formatter));
}
}
break;
case 'perdevice':
if (!empty($properties['DeviceId'])) {
$stream = fopen($conf['activesync']['logging']['path'] . '/' . Horde_String::upper($properties['DeviceId']) . '.txt', 'a');
if ($stream) {
$logger = new Horde_Log_Logger(new Horde_Log_Handler_Stream($stream));
}
}
break;
case 'perrequest':
if (!empty($properties['DeviceId'])) {
$dir = sprintf('%s/%s', $conf['activesync']['logging']['path'], Horde_String::upper($properties['DeviceId']));
if (!is_dir($dir)) {
mkdir($dir, 0755, true);
}
$path = sprintf('%s/%s-%s-%s.txt', $dir, time(), getmypid(), !empty($properties['Cmd']) ? $properties['Cmd'] : 'UnknownCmd');
$stream = fopen($path, 'a');
if ($stream) {
$logger = new Horde_Log_Logger(new Horde_Log_Handler_Stream($stream));
}
}
}
if (!$logger) {
$logger = new Horde_Log_Logger(new Horde_Log_Handler_Null());
}
return $logger;
}
示例9: dayMatches
public function dayMatches($ts)
{
if (!empty($this->day['value']) && $this->day['value'] == '*') {
return true;
}
$currentdaynum = '-' . date('j', $ts) . '-';
$currentdaytxt = Horde_String::upper(date('D'));
foreach ($this->day as $day) {
if (@strpos($day['not'], $currentdaytxt) === false) {
$v1 = @strpos($day['value'], $currentdaynum) !== false;
$v2 = @strpos($day['and'], $currentdaytxt) !== false;
if (!empty($day['and']) && ($v1 && $v2)) {
return true;
} elseif (empty($day['and']) && $v1) {
return true;
}
}
}
return false;
}
示例10: init
/**
* Initialize a HordeMap.
*
* @param array $params
*/
public static function init(array $params = array())
{
global $browser, $conf, $language, $page_output, $registry;
// Language specific file needed?
$language = str_replace('_', '-', $language);
if (!file_exists($registry->get('jsfs', 'horde') . '/map/lang/' . $language . '.js')) {
$language = 'en-US';
}
$params = array_merge(array('conf' => array('language' => $language, 'markerImage' => strval(Horde_Themes::img('map/marker.png')), 'markerBackground' => strval(Horde_Themes::img('map/marker-shadow.png')), 'useMarkerLayer' => true), 'driver' => 'Horde', 'geocoder' => $conf['maps']['geocoder'], 'jsuri' => $registry->get('jsuri', 'horde') . '/map/', 'providers' => $conf['maps']['providers'], 'ssl' => $browser->usingSSLConnection()), $params);
foreach ($params['providers'] as $layer) {
switch ($layer) {
case 'Google':
$params['conf']['apikeys']['google'] = $conf['api']['googlemaps'];
break;
case 'Cloudmade':
$params['conf']['apikeys']['cloudmade'] = $conf['api']['cloudmade'];
break;
case 'Mytopo':
/* Mytopo requires a hash of the *client* IP address and the
* key. Note that this also causes Mytopo to break if the
* client's IP address presented as an internal address. */
$params['conf']['apikeys']['mytopo'] = array('id' => $conf['api']['mytopo_partnerID'], 'hash' => Horde_String::upper(md5($conf['api']['mytopo'] . $browser->getIpAddress())));
break;
}
}
if (!empty($params['geocoder'])) {
switch ($params['geocoder']) {
case 'Google':
$params['conf']['apikeys']['google'] = $conf['api']['googlemaps'];
break;
case 'Cloudmade':
$params['conf']['apikeys']['cloudmade'] = $conf['api']['cloudmade'];
break;
}
}
$page_output->addScriptFile('map/map.js', 'horde');
$page_output->addInlineScript(array('HordeMap.initialize(' . Horde_Serialize::serialize($params, HORDE_SERIALIZE::JSON) . ');'));
}
示例11: create
/**
* Returns the VFS instance.
*
* @param string $backend The backend to return.
*
* @return Horde_Vfs The VFS object.
*/
public function create($backend)
{
if (empty($this->_instances[$backend])) {
$be_config = Gollem_Auth::getBackend($backend);
$params = $be_config['params'];
switch (Horde_String::lower($be_config['driver'])) {
case 'sql':
case 'sqlfile':
case 'musql':
$db_params = $params;
unset($db_params['table']);
$params['db'] = $this->_injector->getInstance('Horde_Core_Factory_Db')->create('gollem', $db_params);
$params['user'] = $GLOBALS['registry']->getAuth();
break;
}
$vfs = Horde_Vfs::factory($be_config['driver'], $params);
if (!empty($be_config['quota'])) {
$vfs->setQuotaRoot($be_config['root'] == '/' ? '' : $be_config['root']);
if (isset($be_config['quota_val'])) {
$vfs->setQuota($be_config['quota_val'], $be_config['quota_metric']);
} else {
$quota_metric = array('B' => Horde_Vfs::QUOTA_METRIC_BYTE, 'KB' => Horde_Vfs::QUOTA_METRIC_KB, 'MB' => Horde_Vfs::QUOTA_METRIC_MB, 'GB' => Horde_Vfs::QUOTA_METRIC_GB);
$quota_str = explode(' ', $be_config['quota'], 2);
if (is_numeric($quota_str[0])) {
$metric = trim(Horde_String::upper($quota_str[1]));
if (!isset($quota_metric[$metric])) {
$metric = 'B';
}
$vfs->setQuota($quota_str[0], $quota_metric[$metric]);
}
}
}
$this->_instances[$backend] = $vfs;
}
return $this->_instances[$backend];
}
示例12: formatOptionStrings
/**
* Return a comma-separated list of option strings & metavariables.
*/
public function formatOptionStrings($option)
{
if ($option->takesValue()) {
$metavar = $option->metavar ? $option->metavar : Horde_String::upper($option->dest);
$short_opts = array();
foreach ($option->shortOpts as $sopt) {
$short_opts[] = sprintf($this->_short_opt_fmt, $sopt, $metavar);
}
$long_opts = array();
foreach ($option->longOpts as $lopt) {
$long_opts[] = sprintf($this->_long_opt_fmt, $lopt, $metavar);
}
} else {
$short_opts = $option->shortOpts;
$long_opts = $option->longOpts;
}
if ($this->short_first) {
$opts = array_merge($short_opts, $long_opts);
} else {
$opts = array_merge($long_opts, $short_opts);
}
return implode(', ', $opts);
}
示例13: transform
/**
* Performs the actual copying/modifying of the files.
*
*/
function transform($outdir)
{
global $files, $rawfiles, $info, $config;
$pk = field_get_primary_key();
// search/replace arrays for default replacment of vocabulary:
$search = array('zitem_id', 'ZOMBIE', 'zombie', 'Zombie', 'zitems', 'Zitems', 'zitem', 'Zitem');
$replace = array($pk['name'], Horde_String::upper($config['app']), Horde_String::lower($config['app']), Horde_String::ucfirst($config['app']), Horde_String::lower($config['set']), Horde_String::ucfirst($config['set']), Horde_String::lower($config['item']), Horde_String::ucfirst($config['item']));
foreach ($files as $file) {
$infile = ZOMBIE_BASE . '/' . $file;
// outfile may be renamed (zombie.php ->appname.php)
$outfile = $outdir . '/' . str_replace($search, $replace, $file);
mkdir_p(dirname($outfile));
$c = file_get_contents($infile);
// deduct handler function name from the file name:
$handler = str_replace('.php', '', trim($file));
$handler = str_replace('.inc', '', $handler);
$handler = str_replace('/', '_', $handler);
$handler = 't_' . $handler;
// if handler is there, apply it:
if (function_exists($handler)) {
print "handler: {$file}\n";
$c = $handler($c);
} else {
print "copy : {$file}\n";
}
//finally do default replacments and write file
$c = str_replace($search, $replace, $c);
$fh = fopen($outfile, "wb");
if ($fh) {
fwrite($fh, $c);
fclose($fh);
}
}
// all the tricky stuff is done, just do raw copy of graphics:
foreach ($rawfiles as $file) {
$infile = "../{$file}";
// outfile is in outdir and maybe renamed (zombie.php ->appname.php)
$outfile = $outdir . '/' . str_replace($search, $replace, $file);
mkdir_p(dirname($outfile));
echo "rawcopy: {$file}\n";
copy($infile, $outfile);
}
}
示例14: addRules
/**
* Adds rules from this ruleset to a VTIMEZONE component.
*
* @param Horde_Icalendar_Vtimezone $tz A VTIMEZONE component.
* @param string $tzid The timezone ID of the component.
* @param string $name A timezone name abbreviation.
* May contain a placeholder that is
* replaced the Rules' "Letter(s)"
* entry.
* @param array $startOffset An offset hash describing the
* base offset of a timezone.
* @param Horde_Date $start Start of the period to add rules
* for.
* @param Horde_Date $end End of the period to add rules
* for.
*/
public function addRules(Horde_Icalendar_Vtimezone $tz, $tzid, $name, $startOffset, Horde_Date $start, Horde_Date $end = null)
{
$offset = $startOffset;
foreach ($this->_rules as $rule) {
$year = $rule[3];
if ($year[0] == 'o') {
// TO is "only"
$rule[3] = $rule[2];
}
if ($rule[3][0] != 'm' && $rule[3] < $start->year) {
// TO is not maximum and is before the searched period
continue;
}
if ($end && $rule[2][0] != 'm' && $rule[2] > $end->year) {
// 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);
$component->setAttribute('TZOFFSETTO', $startOffset);
$offset = $startOffset;
} else {
$component = new Horde_Icalendar_Daylight();
$component->setAttribute('TZOFFSETFROM', $offset);
$offset = $this->_getOffset($startOffset, $rule[8]);
$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])) {
// 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]), 'mday' => $rule[6], 'hour' => $match[1], 'min' => $match[2], '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(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--;
}
$component->setAttribute('DTSTART', $last);
if ($rule[3][0] == 'm') {
$until = '';
} else {
$last = new Horde_Date(array('year' => $rule[3], 'month' => $month, 'mday' => Horde_Date_Utils::daysInMonth($month, $rule[2]), 'hour' => $match[1], 'min' => $match[2], 'sec' => 0), $tzid);
while ($last->dayOfWeek() != $weekday) {
$last->mday--;
}
$last->setTimezone('UTC');
$until = ';UNTIL=' . $last->format('Ymd\\THIs') . 'Z';
}
$component->setAttribute('RRULE', 'FREQ=YEARLY;BYDAY=-1' . 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, 'hour' => $match[1], 'min' => $match[2], 'sec' => 0));
while ($first->dayOfWeek() != $weekdayInt) {
$first->mday++;
}
$component->setAttribute('DTSTART', $first);
if ($rule[3][0] == 'm') {
$until = '';
} else {
$last = new Horde_Date(array('year' => $rule[3], 'month' => $month, 'mday' => $day, 'hour' => $match[1], 'min' => $match[2], 'sec' => 0), $tzid);
while ($last->dayOfWeek() != $weekday) {
$last->mday++;
}
$last->setTimezone('UTC');
$until = ';UNTIL=' . $last->format('Ymd\\THIs') . 'Z';
}
for ($days = array(), $i = $day, $lastDay = min(Horde_Date_Utils::daysInMonth($month, $rule[2]), $i + 6); $day > 1 && $i <= $lastDay; $i++) {
$days[] = $i;
}
//.........这里部分代码省略.........
示例15: _
echo _("Today");
} elseif ($which == 1) {
echo _("Tomorrow");
} else {
echo strftime('%A', mktime(0, 0, 0, date('m'), date('d') + $futureDays, date('Y')));
}
?>
</strong><br /><?php
echo strftime('%b %d', mktime(0, 0, 0, date('m'), date('d') + $futureDays, date('Y')));
?>
</td>
<td><span style="color:red"><?php
echo $day->high . '°' . Horde_String::upper($this->units['temp']);
?>
</span>/<span style="color:blue"><?php
echo $day->low . '°' . Horde_String::upper($this->units['temp']);
?>
</span></td>
<td><?php
echo Horde_Themes_Image::tag('weather/32x32/' . $day->icon);
?>
<br /><?php
echo $day->conditions;
?>
</td>
<?php
if (isset($this->params['detailedForecast'])) {
?>
<?php
if (in_array(Horde_Service_Weather::FORECAST_FIELD_PRECIPITATION, $this->forecast->fields)) {
?>