X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fdatetime.php;h=0faea8c90e5fd9e4b8caa31242021f5fb88e584e;hb=b4d14164bb47a76e62977447816fae5b65ea4da7;hp=5d789fc3bbaff6e8bd82485c28430f41a4ec9293;hpb=9c2c4839968169a191084d6d2b0d629d82430e67;p=friendica.git diff --git a/include/datetime.php b/include/datetime.php index 5d789fc3bb..0faea8c90e 100644 --- a/include/datetime.php +++ b/include/datetime.php @@ -4,7 +4,9 @@ * @brief Some functions for date and time related tasks. */ -use \Friendica\Core\Config; +use Friendica\Core\Config; +use Friendica\Core\PConfig; +use Friendica\Database\DBM; /** * @brief Two-level sort for timezones. @@ -14,20 +16,27 @@ use \Friendica\Core\Config; * @return int */ function timezone_cmp($a, $b) { - if (strstr($a,'/') && strstr($b,'/')) { - if ( t($a) == t($b)) return 0; + if (strstr($a, '/') && strstr($b, '/')) { + if ( t($a) == t($b)) { + return 0; + } return ( t($a) < t($b)) ? -1 : 1; } - if (strstr($a,'/')) return -1; - if (strstr($b,'/')) return 1; - if ( t($a) == t($b)) return 0; + + if (strstr($a, '/')) { + return -1; + } elseif (strstr($b, '/')) { + return 1; + } elseif ( t($a) == t($b)) { + return 0; + } return ( t($a) < t($b)) ? -1 : 1; } /** * @brief Emit a timezone selector grouped (primarily) by continent - * + * * @param string $current Timezone * @return string Parsed HTML output */ @@ -43,8 +52,9 @@ function select_timezone($current = 'America/Los_Angeles') { $ex = explode("/", $value); if (count($ex) > 1) { if ($ex[0] != $continent) { - if ($continent != '') + if ($continent != '') { $o .= ''; + } $continent = $ex[0]; $o .= ''; } @@ -73,17 +83,17 @@ function select_timezone($current = 'America/Los_Angeles') { /** * @brief Generating a Timezone selector - * + * * Return a select using 'field_select_raw' template, with timezones * groupped (primarily) by continent * arguments follow convetion as other field_* template array: * 'name', 'label', $value, 'help' - * + * * @param string $name Name of the selector * @param string $label Label for the selector * @param string $current Timezone * @param string $help Help text - * + * * @return string Parsed HTML */ function field_timezone($name='timezone', $label='', $current = 'America/Los_Angeles', $help){ @@ -92,9 +102,9 @@ function field_timezone($name='timezone', $label='', $current = 'America/Los_Ang $options = str_replace('','', $options); $tpl = get_markup_template('field_select_raw.tpl'); - return replace_macros($tpl, array( - '$field' => array($name, $label, $current, $help, $options), - )); + return replace_macros($tpl, [ + '$field' => [$name, $label, $current, $help, $options], + ]); } @@ -106,7 +116,7 @@ function field_timezone($name='timezone', $label='', $current = 'America/Los_Ang * @param string $s Some parseable date/time string * @param string $fmt Output format recognised from php's DateTime class * http://www.php.net/manual/en/datetime.format.php - * + * * @return string Formatted date according to given format */ function datetime_convert($from = 'UTC', $to = 'UTC', $s = 'now', $fmt = "Y-m-d H:i:s") { @@ -114,48 +124,50 @@ function datetime_convert($from = 'UTC', $to = 'UTC', $s = 'now', $fmt = "Y-m-d // Defaults to UTC if nothing is set, but throws an exception if set to empty string. // Provide some sane defaults regardless. - if ($from === '') + if ($from === '') { $from = 'UTC'; - if ($to === '') + } + if ($to === '') { $to = 'UTC'; - if ( ($s === '') || (! is_string($s)) ) + } + if ( ($s === '') || (! is_string($s)) ) { $s = 'now'; + } - // Slight hackish adjustment so that 'zero' datetime actually returns what is intended - // otherwise we end up with -0001-11-30 ... - // add 32 days so that we at least get year 00, and then hack around the fact that - // months and days always start with 1. + /* + * Slight hackish adjustment so that 'zero' datetime actually returns what is intended + * otherwise we end up with -0001-11-30 ... + * add 32 days so that we at least get year 00, and then hack around the fact that + * months and days always start with 1. + */ - if (substr($s,0,10) == '0000-00-00') { + if (substr($s,0,10) <= '0001-01-01') { $d = new DateTime($s . ' + 32 days', new DateTimeZone('UTC')); return str_replace('1','0',$d->format($fmt)); } try { $from_obj = new DateTimeZone($from); - } - catch(Exception $e) { + } catch (Exception $e) { $from_obj = new DateTimeZone('UTC'); } try { $d = new DateTime($s, $from_obj); - } - catch(Exception $e) { + } catch (Exception $e) { logger('datetime_convert: exception: ' . $e->getMessage()); $d = new DateTime('now', $from_obj); } try { $to_obj = new DateTimeZone($to); - } - catch(Exception $e) { + } catch (Exception $e) { $to_obj = new DateTimeZone('UTC'); } $d->setTimeZone($to_obj); - return($d->format($fmt)); + return $d->format($fmt); } @@ -165,32 +177,32 @@ function datetime_convert($from = 'UTC', $to = 'UTC', $s = 'now', $fmt = "Y-m-d * @param string $dob Date of Birth * @return string Formatted html */ -function dob($dob) { - list($year,$month,$day) = sscanf($dob,'%4d-%2d-%2d'); +function dob($dob) +{ + list($year, $month, $day) = sscanf($dob, '%4d-%2d-%2d'); - $f = get_config('system','birthday_input_format'); - if (! $f) - $f = 'ymd'; - if ($dob === '0000-00-00') + if ($dob <= '0001-01-01') { $value = ''; - else + } else { $value = (($year) ? datetime_convert('UTC','UTC',$dob,'Y-m-d') : datetime_convert('UTC','UTC',$dob,'m-d')); + } $age = ((intval($value)) ? age($value, $a->user["timezone"], $a->user["timezone"]) : ""); - $o = replace_macros(get_markup_template("field_input.tpl"), array( - '$field' => array( + $o = replace_macros(get_markup_template("field_input.tpl"), [ + '$field' => [ 'dob', t('Birthday:'), $value, (((intval($age)) > 0 ) ? t('Age: ') . $age : ""), '', 'placeholder="' . t('YYYY-MM-DD or MM-DD') . '"' - ) - )); + ] + ]); -// if ($dob && $dob != '0000-00-00') -// $o = datesel($f,mktime(0,0,0,0,0,1900),mktime(),mktime(0,0,0,$month,$day,$year),'dob'); + /// @TODO Old-lost code? +// if ($dob && $dob > '0001-01-01') +// $o = datesel($f,mktime(0,0,0,0,0,1900),mktime(),mktime(0,0,0,$month,$day,$year), 'dob'); // else // $o = datesel($f,mktime(0,0,0,0,0,1900),mktime(),false,'dob'); @@ -199,9 +211,7 @@ function dob($dob) { /** * @brief Returns a date selector - * - * @param string $format - * Format string, e.g. 'ymd' or 'mdy'. Not currently supported + * * @param string $min * Unix timestamp of minimum date * @param string $max @@ -210,36 +220,34 @@ function dob($dob) { * Unix timestamp of default date * @param string $id * ID and name of datetimepicker (defaults to "datetimepicker") - * + * * @return string Parsed HTML output. */ -function datesel($format, $min, $max, $default, $id = 'datepicker') { - return datetimesel($format,$min,$max,$default,'',$id,true,false, '',''); +function datesel($min, $max, $default, $id = 'datepicker') +{ + return datetimesel($min, $max, $default, '', $id, true, false, '', ''); } /** * @brief Returns a time selector - * - * @param string $format - * Format string, e.g. 'ymd' or 'mdy'. Not currently supported + * * @param $h * Already selected hour * @param $m * Already selected minute * @param string $id * ID and name of datetimepicker (defaults to "timepicker") - * + * * @return string Parsed HTML output. */ -function timesel($format, $h, $m, $id='timepicker') { - return datetimesel($format,new DateTime(),new DateTime(),new DateTime("$h:$m"),'',$id,false,true); +function timesel($h, $m, $id = 'timepicker') +{ + return datetimesel(new DateTime(), new DateTime(), new DateTime("$h:$m"), '', $id, false, true); } /** * @brief Returns a datetime selector. * - * @param string $format - * format string, e.g. 'ymd' or 'mdy'. Not currently supported * @param string $min * unix timestamp of minimum date * @param string $max @@ -257,31 +265,36 @@ function timesel($format, $h, $m, $id='timepicker') { * @param $maxfrom * set maximum date from picker with id $maxfrom (none by default) * @param bool $required default false - * + * * @return string Parsed HTML output. * * @todo Once browser support is better this could probably be replaced with * native HTML5 date picker. */ -function datetimesel($format, $min, $max, $default, $label, $id = 'datetimepicker', $pickdate = true, $picktime = true, $minfrom = '', $maxfrom = '', $required = false) { - +function datetimesel($min, $max, $default, $label, $id = 'datetimepicker', $pickdate = true, $picktime = true, $minfrom = '', $maxfrom = '', $required = false) +{ // First day of the week (0 = Sunday) - $firstDay = get_pconfig(local_user(),'system','first_day_of_week'); - if ($firstDay === false) $firstDay=0; + $firstDay = PConfig::get(local_user(), 'system', 'first_day_of_week', 0); $lang = substr(get_browser_language(), 0, 2); // Check if the detected language is supported by the picker - if (!in_array($lang, array("ar", "ro", "id", "bg", "fa", "ru", "uk", "en", "el", "de", "nl", "tr", "fr", "es", "th", "pl", "pt", "ch", "se", "kr", "it", "da", "no", "ja", "vi", "sl", "cs", "hu"))) { + if (!in_array($lang, ["ar", "ro", "id", "bg", "fa", "ru", "uk", "en", "el", "de", "nl", "tr", "fr", "es", "th", "pl", "pt", "ch", "se", "kr", "it", "da", "no", "ja", "vi", "sl", "cs", "hu"])) { $lang = Config::get('system', 'language', 'en'); } $o = ''; $dateformat = ''; - if ($pickdate) $dateformat .= 'Y-m-d'; - if ($pickdate && $picktime) $dateformat .= ' '; - if ($picktime) $dateformat .= 'H:i'; + if ($pickdate) { + $dateformat .= 'Y-m-d'; + } + if ($pickdate && $picktime) { + $dateformat .= ' '; + } + if ($picktime) { + $dateformat .= 'H:i'; + } $minjs = $min ? ",minDate: new Date({$min->getTimestamp()}*1000), yearStart: " . $min->format('Y') : ''; $maxjs = $max ? ",maxDate: new Date({$max->getTimestamp()}*1000), yearEnd: " . $max->format('Y') : ''; @@ -290,15 +303,21 @@ function datetimesel($format, $min, $max, $default, $label, $id = 'datetimepicke $defaultdatejs = $default ? ",defaultDate: new Date({$default->getTimestamp()}*1000)" : ''; $pickers = ''; - if (!$pickdate) $pickers .= ',datepicker: false'; - if (!$picktime) $pickers .= ',timepicker: false'; + if (!$pickdate) { + $pickers .= ', datepicker: false'; + } + if (!$picktime) { + $pickers .= ',timepicker: false'; + } $extra_js = ''; - $pickers .= ",dayOfWeekStart: ".$firstDay.",lang:'".$lang."'"; - if ($minfrom != '') + $pickers .= ",dayOfWeekStart: " . $firstDay . ",lang:'" . $lang . "'"; + if ($minfrom != '') { $extra_js .= "\$('#id_$minfrom').data('xdsoft_datetimepicker').setOptions({onChangeDateTime: function (currentDateTime) { \$('#id_$id').data('xdsoft_datetimepicker').setOptions({minDate: currentDateTime})}})"; - if ($maxfrom != '') + } + if ($maxfrom != '') { $extra_js .= "\$('#id_$maxfrom').data('xdsoft_datetimepicker').setOptions({onChangeDateTime: function (currentDateTime) { \$('#id_$id').data('xdsoft_datetimepicker').setOptions({maxDate: currentDateTime})}})"; + } $readable_format = $dateformat; $readable_format = str_replace('Y','yyyy',$readable_format); @@ -308,9 +327,9 @@ function datetimesel($format, $min, $max, $default, $label, $id = 'datetimepicke $readable_format = str_replace('i','MM',$readable_format); $tpl = get_markup_template('field_input.tpl'); - $o .= replace_macros($tpl,array( - '$field' => array($id, $label, $input_text, '', (($required) ? '*' : ''), 'placeholder="' . $readable_format . '"'), - )); + $o .= replace_macros($tpl, [ + '$field' => [$id, $label, $input_text, '', (($required) ? '*' : ''), 'placeholder="' . $readable_format . '"'], + ]); $o .= "