]> git.mxchange.org Git - friendica.git/commitdiff
Merge pull request #4386 from MrPetovan/task/3878-move-friendica_smarty-to-src
authorTobias Diekershoff <tobias.diekershoff@gmx.net>
Sat, 3 Feb 2018 16:01:30 +0000 (17:01 +0100)
committerGitHub <noreply@github.com>
Sat, 3 Feb 2018 16:01:30 +0000 (17:01 +0100)
Move SMARTY3_TEMPLATE_FOLDER to FriendicaSmarty

68 files changed:
boot.php
include/api.php
include/bb2diaspora.php
include/conversation.php
include/datetime.php
include/dba.php
include/enotify.php
include/event.php
include/items.php
include/security.php
include/text.php
mod/admin.php
mod/cal.php
mod/contacts.php
mod/dfrn_confirm.php
mod/dfrn_request.php
mod/events.php
mod/fsuggest.php
mod/install.php
mod/invite.php
mod/item.php
mod/localtime.php
mod/lostpass.php
mod/message.php
mod/network.php
mod/photos.php
mod/ping.php
mod/poco.php
mod/profile.php
mod/profile_photo.php
mod/profiles.php
mod/proxy.php
mod/pubsubhubbub.php
mod/register.php
mod/settings.php
mod/videos.php
mod/wall_attach.php
src/Content/OEmbed.php
src/Core/Cache.php
src/Core/NotificationsManager.php
src/Core/Worker.php
src/Database/DBM.php
src/Model/Contact.php
src/Model/GContact.php
src/Model/Item.php
src/Model/Mail.php
src/Model/Photo.php
src/Model/Process.php
src/Model/Profile.php
src/Model/Queue.php
src/Model/User.php
src/Module/Login.php
src/Network/FKOAuth1.php
src/Object/Post.php
src/Protocol/DFRN.php
src/Protocol/Diaspora.php
src/Protocol/OStatus.php
src/Protocol/PortableContact.php
src/Util/DateTimeFormat.php [new file with mode: 0644]
src/Util/ParseUrl.php
src/Util/Temporal.php [new file with mode: 0644]
src/Worker/Cron.php
src/Worker/CronHooks.php
src/Worker/DiscoverPoCo.php
src/Worker/OnePoll.php
src/Worker/UpdateGContact.php
view/templates/field_datetime.tpl [new file with mode: 0644]
view/theme/frio/templates/field_input.tpl

index 732816d1b9354f28010bdbfa67a85f2055060809..a699a66f95d29cc5b0c17c3624584808959c687a 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -21,16 +21,15 @@ require_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'a
 
 use Friendica\App;
 use Friendica\Core\Addon;
-use Friendica\Core\System;
-use Friendica\Core\Cache;
 use Friendica\Core\Config;
-use Friendida\Core\L10n;
+use Friendica\Core\L10n;
 use Friendica\Core\PConfig;
+use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
-use Friendica\Model\Contact;
 use Friendica\Database\DBStructure;
-use Friendica\Module\Login;
+use Friendica\Model\Contact;
+use Friendica\Util\DateTimeFormat;
 
 require_once 'include/text.php';
 require_once 'include/datetime.php';
@@ -57,7 +56,6 @@ const DB_UPDATE_FAILED = 2;      // Database check failed
  * This can be used in HTML and JavaScript where needed a line break.
  */
 define('EOL',                    "<br />\r\n");
-define('ATOM_TIME',              'Y-m-d\TH:i:s\Z');
 
 /**
  * @brief Image storage quality.
@@ -1144,14 +1142,14 @@ function feed_birthday($uid, $tz)
        if (DBM::is_result($p)) {
                $tmp_dob = substr($p[0]['dob'], 5);
                if (intval($tmp_dob)) {
-                       $y = datetime_convert($tz, $tz, 'now', 'Y');
+                       $y = DateTimeFormat::timezoneNow($tz, 'Y');
                        $bd = $y . '-' . $tmp_dob . ' 00:00';
                        $t_dob = strtotime($bd);
-                       $now = strtotime(datetime_convert($tz, $tz, 'now'));
+                       $now = strtotime(DateTimeFormat::timezoneNow($tz));
                        if ($t_dob < $now) {
                                $bd = $y + 1 . '-' . $tmp_dob . ' 00:00';
                        }
-                       $birthday = datetime_convert($tz, 'UTC', $bd, ATOM_TIME);
+                       $birthday = DateTimeFormat::convert($bd, 'UTC', $tz, DateTimeFormat::ATOM);
                }
        }
 
index 4edced2214eb6f21eb0c49508b691d1bf9d1ec3f..96a935614dbf44aab6b1ba3f7b4f5cabad2c93f1 100644 (file)
@@ -5,24 +5,25 @@
  * @file include/api.php
  * @todo Automatically detect if incoming data is HTML or BBCode
  */
+
 use Friendica\App;
 use Friendica\Content\ContactSelector;
 use Friendica\Content\Feature;
 use Friendica\Content\Text\BBCode;
 use Friendica\Core\Addon;
-use Friendica\Core\System;
 use Friendica\Core\Config;
-use Friendica\Core\NotificationsManager;
 use Friendica\Core\L10n;
+use Friendica\Core\NotificationsManager;
 use Friendica\Core\PConfig;
+use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
 use Friendica\Model\Contact;
 use Friendica\Model\Group;
+use Friendica\Model\Item;
 use Friendica\Model\Mail;
 use Friendica\Model\Photo;
 use Friendica\Model\User;
-use Friendica\Model\Item;
 use Friendica\Network\FKOAuth1;
 use Friendica\Network\HTTPException;
 use Friendica\Network\HTTPException\BadRequestException;
@@ -31,10 +32,11 @@ use Friendica\Network\HTTPException\InternalServerErrorException;
 use Friendica\Network\HTTPException\MethodNotAllowedException;
 use Friendica\Network\HTTPException\NotFoundException;
 use Friendica\Network\HTTPException\NotImplementedException;
-use Friendica\Network\HTTPException\UnauthorizedException;
 use Friendica\Network\HTTPException\TooManyRequestsException;
+use Friendica\Network\HTTPException\UnauthorizedException;
 use Friendica\Object\Image;
 use Friendica\Protocol\Diaspora;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
 use Friendica\Util\XML;
 
@@ -109,7 +111,7 @@ function api_source()
 function api_date($str)
 {
        // Wed May 23 06:01:13 +0000 2007
-       return datetime_convert('UTC', 'UTC', $str, "D M d H:i:s +0000 Y");
+       return DateTimeFormat::utc($str, "D M d H:i:s +0000 Y");
 }
 
 /**
@@ -458,7 +460,7 @@ function api_rss_extra(App $a, $arr, $user_info)
                'self'         => System::baseUrl() . "/" . $a->query_string,
                'base'         => System::baseUrl(),
                'updated'      => api_date(null),
-               'atom_updated' => datetime_convert('UTC', 'UTC', 'now', ATOM_TIME),
+               'atom_updated' => DateTimeFormat::utcNow(DateTimeFormat::ATOM),
                'language'     => $user_info['language'],
                'logo'         => System::baseUrl() . "/images/friendica-32.png",
        ];
@@ -1160,7 +1162,7 @@ function api_statuses_update($type)
                // Check for throttling (maximum posts per day, week and month)
                $throttle_day = Config::get('system', 'throttle_limit_day');
                if ($throttle_day > 0) {
-                       $datefrom = date("Y-m-d H:i:s", time() - 24*60*60);
+                       $datefrom = date(DateTimeFormat::MYSQL, time() - 24*60*60);
 
                        $r = q(
                                "SELECT COUNT(*) AS `posts_day` FROM `item` WHERE `uid`=%d AND `wall`
@@ -1184,7 +1186,7 @@ function api_statuses_update($type)
 
                $throttle_week = Config::get('system', 'throttle_limit_week');
                if ($throttle_week > 0) {
-                       $datefrom = date("Y-m-d H:i:s", time() - 24*60*60*7);
+                       $datefrom = date(DateTimeFormat::MYSQL, time() - 24*60*60*7);
 
                        $r = q(
                                "SELECT COUNT(*) AS `posts_week` FROM `item` WHERE `uid`=%d AND `wall`
@@ -1208,7 +1210,7 @@ function api_statuses_update($type)
 
                $throttle_month = Config::get('system', 'throttle_limit_month');
                if ($throttle_month > 0) {
-                       $datefrom = date("Y-m-d H:i:s", time() - 24*60*60*30);
+                       $datefrom = date(DateTimeFormat::MYSQL, time() - 24*60*60*30);
 
                        $r = q(
                                "SELECT COUNT(*) AS `posts_month` FROM `item` WHERE `uid`=%d AND `wall`
@@ -3205,7 +3207,7 @@ function api_account_rate_limit_status($type)
                                '@attributes' => ["type" => "integer"],
                                'hourly-limit' => '150',
                                '@attributes2' => ["type" => "integer"],
-                               'reset-time' => datetime_convert('UTC', 'UTC', 'now + 1 hour', ATOM_TIME),
+                               'reset-time' => DateTimeFormat::utc('now + 1 hour', DateTimeFormat::ATOM),
                                '@attributes3' => ["type" => "datetime"],
                                'reset_time_in_seconds' => strtotime('now + 1 hour'),
                                '@attributes4' => ["type" => "integer"],
@@ -3215,7 +3217,7 @@ function api_account_rate_limit_status($type)
                                'reset_time_in_seconds' => strtotime('now + 1 hour'),
                                'remaining_hits' => '150',
                                'hourly_limit' => '150',
-                               'reset_time' => api_date(datetime_convert('UTC', 'UTC', 'now + 1 hour', ATOM_TIME)),
+                               'reset_time' => api_date(DateTimeFormat::utc('now + 1 hour', DateTimeFormat::ATOM)),
                        ];
        }
 
@@ -4214,7 +4216,7 @@ function api_fr_photo_create_update($type)
                        $result = q(
                                "UPDATE `photo` SET %s, `edited`='%s' WHERE `uid` = %d AND `resource-id` = '%s' AND `album` = '%s'",
                                $sql_extra,
-                               datetime_convert(),   // update edited timestamp
+                               DateTimeFormat::utcNow(),   // update edited timestamp
                                intval(api_user()),
                                dbesc($photo_id),
                                dbesc($album)
@@ -4418,7 +4420,7 @@ function api_account_update_profile_image($type)
 
        q(
                "UPDATE `contact` SET `avatar-date` = '%s' WHERE `self` = 1 AND `uid` = %d",
-               dbesc(datetime_convert()),
+               dbesc(DateTimeFormat::utcNow()),
                intval(local_user())
        );
 
index 95047d61aed597d63ab51d7d362d446ec9e5d75f..0cb50e95ee125a0443f3267ef50ecafa2c9b3155 100644 (file)
@@ -3,9 +3,11 @@
 use Friendica\Content\Text\BBCode;
 use Friendica\Content\Text\Markdown;
 use Friendica\Core\Addon;
+use Friendica\Core\L10n;
 use Friendica\Core\System;
 use Friendica\Model\Contact;
 use Friendica\Network\Probe;
+use Friendica\Util\DateTimeFormat;
 use League\HTMLToMarkdown\HtmlConverter;
 
 require_once 'include/event.php';
@@ -241,20 +243,17 @@ function format_event_diaspora($ev) {
 
        $o .= '**' . (($ev['summary']) ? bb2diaspora($ev['summary']) : bb2diaspora($ev['desc'])) .  '**' . "\n";
 
-       $o .= L10n::t('Starts:') . ' ' . '['
-               . (($ev['adjust']) ? day_translate(datetime_convert('UTC', 'UTC',
-                       $ev['start'] , $bd_format ))
-                       :  day_translate(datetime_convert('UTC', 'UTC',
-                       $ev['start'] , $bd_format)))
-               .  '](' . System::baseUrl() . '/localtime/?f=&time=' . urlencode(datetime_convert('UTC','UTC',$ev['start'])) . ")\n";
+       // @todo What. Is. Going. On. With. This. Useless. Ternary. Operator? - mrpetovan
+       $o .= L10n::t('Starts:') . ' ' . '[' . day_translate(
+                       $ev['adjust'] ? DateTimeFormat::utc($ev['start'], $bd_format) : DateTimeFormat::utc($ev['start'], $bd_format)
+               )
+               .  '](' . System::baseUrl() . '/localtime/?f=&time=' . urlencode(DateTimeFormat::utc($ev['start'])) . ")\n";
 
        if (! $ev['nofinish']) {
-               $o .= L10n::t('Finishes:') . ' ' . '['
-                       . (($ev['adjust']) ? day_translate(datetime_convert('UTC', 'UTC',
-                               $ev['finish'] , $bd_format ))
-                               :  day_translate(datetime_convert('UTC', 'UTC',
-                               $ev['finish'] , $bd_format )))
-                       . '](' . System::baseUrl() . '/localtime/?f=&time=' . urlencode(datetime_convert('UTC','UTC',$ev['finish'])) . ")\n";
+               $o .= L10n::t('Finishes:') . ' ' . '[' . day_translate(
+                               $ev['adjust'] ? DateTimeFormat::utc($ev['finish'], $bd_format) : DateTimeFormat::utc($ev['finish'], $bd_format)
+                       )
+                       . '](' . System::baseUrl() . '/localtime/?f=&time=' . urlencode(DateTimeFormat::utc($ev['finish'])) . ")\n";
        }
 
        if (strlen($ev['location'])) {
index 442ce4b8bbb97f048bcfaa877274fc526fc8eefc..d312c2d9e24886c05f6a78d2f1850af505d00597 100644 (file)
@@ -2,6 +2,7 @@
 /**
  * @file include/conversation.php
  */
+
 use Friendica\App;
 use Friendica\Content\ContactSelector;
 use Friendica\Content\Feature;
@@ -13,9 +14,10 @@ use Friendica\Core\System;
 use Friendica\Database\DBM;
 use Friendica\Model\Contact;
 use Friendica\Model\Profile;
-use Friendica\Object\Thread;
 use Friendica\Object\Post;
 use Friendica\Util\XML;
+use Friendica\Object\Thread;
+use Friendica\Util\DateTimeFormat;
 
 require_once "include/bbcode.php";
 require_once "include/acl_selectors.php";
@@ -788,7 +790,7 @@ function conversation(App $a, $items, $mode, $update, $preview = false) {
                                        'categories' => $categories,
                                        'folders' => $folders,
                                        'text' => strip_tags($body_e),
-                                       'localtime' => datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'r'),
+                                       'localtime' => DateTimeFormat::local($item['created'], 'r'),
                                        'ago' => (($item['app']) ? L10n::t('%s from %s', relative_date($item['created']),$item['app']) : relative_date($item['created'])),
                                        'location' => $location_e,
                                        'indent' => '',
index 9ff2f1ac68a5d64fba990e7a5d4e9107b347ad41..a917accc1da99c78c99f4ea9dced8711b8499e04 100644 (file)
  * @brief Some functions for date and time related tasks.
  */
 
-use Friendica\Core\Config;
-use Friendica\Core\L10n;
-use Friendica\Core\PConfig;
-use Friendica\Database\DBM;
+use Friendica\Model\Contact;
+use Friendica\Util\Temporal;
 
-/**
- * @brief Two-level sort for timezones.
- *
- * @param string $a
- * @param string $b
- * @return int
- */
-function timezone_cmp($a, $b) {
-       if (strstr($a, '/') && strstr($b, '/')) {
-               if (L10n::t($a) == L10n::t($b)) {
-                       return 0;
-               }
-               return (L10n::t($a) < L10n::t($b)) ? -1 : 1;
-       }
-
-       if (strstr($a, '/')) {
-               return -1;
-       } elseif (strstr($b, '/')) {
-               return  1;
-       } elseif (L10n::t($a) == L10n::t($b)) {
-               return 0;
-       }
-
-       return (L10n::t($a) < L10n::t($b)) ? -1 : 1;
+function dob($dob) {
+       return Temporal::getDateofBirthField($dob);
 }
 
-/**
- * @brief Emit a timezone selector grouped (primarily) by continent
- *
- * @param string $current Timezone
- * @return string Parsed HTML output
- */
-function select_timezone($current = 'America/Los_Angeles') {
-
-       $timezone_identifiers = DateTimeZone::listIdentifiers();
-
-       $o ='<select id="timezone_select" name="timezone">';
-
-       usort($timezone_identifiers, 'timezone_cmp');
-       $continent = '';
-       foreach ($timezone_identifiers as $value) {
-               $ex = explode("/", $value);
-               if (count($ex) > 1) {
-                       if ($ex[0] != $continent) {
-                               if ($continent != '') {
-                                       $o .= '</optgroup>';
-                               }
-                               $continent = $ex[0];
-                               $o .= '<optgroup label="' . L10n::t($continent) . '">';
-                       }
-                       if (count($ex) > 2) {
-                               $city = substr($value,strpos($value,'/')+1);
-                       } else {
-                               $city = $ex[1];
-                       }
-               } else {
-                       $city = $ex[0];
-                       if ($continent != L10n::t('Miscellaneous')) {
-                               $o .= '</optgroup>';
-                               $continent = L10n::t('Miscellaneous');
-                               $o .= '<optgroup label="' . L10n::t($continent) . '">';
-                       }
-               }
-               $city = str_replace('_', ' ', L10n::t($city));
-               $selected = (($value == $current) ? " selected=\"selected\" " : "");
-               $o .= "<option value=\"$value\" $selected >$city</option>";
-       }
-       $o .= '</optgroup></select>';
-       return $o;
+function datesel($min, $max, $default, $id = 'datepicker') {
+       return Temporal::getDateField($min, $max, $default, $id);
 }
 
-
-
-/**
- * @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){
-       $options = select_timezone($current);
-       $options = str_replace('<select id="timezone_select" name="timezone">','', $options);
-       $options = str_replace('</select>','', $options);
-
-       $tpl = get_markup_template('field_select_raw.tpl');
-       return replace_macros($tpl, [
-               '$field' => [$name, $label, $current, $help, $options],
-       ]);
-
+function timesel($h, $m, $id = 'timepicker') {
+       return Temporal::getTimeField($h, $m, $id);
 }
 
-/**
- * @brief General purpose date parse/convert function.
- *
- * @param string $from Source timezone
- * @param string $to Dest timezone
- * @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") {
-
-       // Defaults to UTC if nothing is set, but throws an exception if set to empty string.
-       // Provide some sane defaults regardless.
-
-       if ($from === '') {
-               $from = 'UTC';
-       }
-       if ($to === '') {
-               $to = 'UTC';
-       }
-       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.
-        */
-
-       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) {
-               $from_obj = new DateTimeZone('UTC');
-       }
-
-       try {
-               $d = new DateTime($s, $from_obj);
-       } catch (Exception $e) {
-               logger('datetime_convert: exception: ' . $e->getMessage());
-               $d = new DateTime('now', $from_obj);
-       }
-
-       try {
-               $to_obj = new DateTimeZone($to);
-       } catch (Exception $e) {
-               $to_obj = new DateTimeZone('UTC');
-       }
-
-       $d->setTimeZone($to_obj);
-
-       return $d->format($fmt);
-}
-
-
-/**
- * @brief Wrapper for date selector, tailored for use in birthday fields.
- *
- * @param string $dob Date of Birth
- * @return string Formatted html
- */
-function dob($dob)
-{
-       list($year, $month, $day) = sscanf($dob, '%4d-%2d-%2d');
-
-       if ($dob < '0000-01-01') {
-               $value = '';
-       } else {
-               $value = (($year > 1000) ? datetime_convert('UTC', 'UTC', $dob, 'Y-m-d') : datetime_convert('UTC', 'UTC', '1000-' . $month . '-'. $day, 'm-d'));
-       }
-
-       $age = (intval($value) ? age($value, $a->user["timezone"], $a->user["timezone"]) : "");
-
-       $o = replace_macros(get_markup_template("field_input.tpl"), [
-               '$field' => [
-                       'dob',
-                       L10n::t('Birthday:'),
-                       $value,
-                       (((intval($age)) > 0 ) ? L10n::t('Age: ') . $age : ""),
-                       '',
-                       'placeholder="' . L10n::t('YYYY-MM-DD or MM-DD') . '"'
-               ]
-       ]);
-
-       return $o;
-}
-
-/**
- * @brief Returns a date selector
- *
- * @param string $min
- *  Unix timestamp of minimum date
- * @param string $max
- *  Unix timestap of maximum date
- * @param string $default
- *  Unix timestamp of default date
- * @param string $id
- *  ID and name of datetimepicker (defaults to "datetimepicker")
- *
- * @return string Parsed HTML output.
- */
-function datesel($min, $max, $default, $id = 'datepicker')
-{
-       return datetimesel($min, $max, $default, '', $id, true, false, '', '');
-}
-
-/**
- * @brief Returns a time selector
- *
- * @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($h, $m, $id = 'timepicker')
-{
-       return datetimesel(new DateTime(), new DateTime(), new DateTime("$h:$m"), '', $id, false, true);
-}
-
-/**
- * @brief Returns a datetime selector.
- *
- * @param string $min
- *  unix timestamp of minimum date
- * @param string $max
- *  unix timestap of maximum date
- * @param string $default
- *  unix timestamp of default date
- * @param string $id
- *  id and name of datetimepicker (defaults to "datetimepicker")
- * @param bool $pickdate
- *  true to show date picker (default)
- * @param boolean $picktime
- *  true to show time picker (default)
- * @param $minfrom
- *  set minimum date from picker with id $minfrom (none by default)
- * @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($min, $max, $default, $label, $id = 'datetimepicker', $pickdate = true, $picktime = true, $minfrom = '', $maxfrom = '', $required = false)
-{
-       // First day of the week (0 = Sunday)
-       $firstDay = PConfig::get(local_user(), 'system', 'first_day_of_week', 0);
-
-       $lang = substr(L10n::getBrowserLanguage(), 0, 2);
-
-       // Check if the detected language is supported by the picker
-       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';
-       }
-
-       $minjs = $min ? ",minDate: new Date({$min->getTimestamp()}*1000), yearStart: " . $min->format('Y') : '';
-       $maxjs = $max ? ",maxDate: new Date({$max->getTimestamp()}*1000), yearEnd: " . $max->format('Y') : '';
-
-       $input_text = $default ? date($dateformat, $default->getTimestamp()) : '';
-       $defaultdatejs = $default ? ",defaultDate: new Date({$default->getTimestamp()}*1000)" : '';
-
-       $pickers = '';
-       if (!$pickdate) {
-               $pickers .= ', datepicker: false';
-       }
-       if (!$picktime) {
-               $pickers .= ',timepicker: false';
-       }
-
-       $extra_js = '';
-       $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 != '') {
-               $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);
-       $readable_format = str_replace('m','mm',$readable_format);
-       $readable_format = str_replace('d','dd',$readable_format);
-       $readable_format = str_replace('H','HH',$readable_format);
-       $readable_format = str_replace('i','MM',$readable_format);
-
-       $tpl = get_markup_template('field_input.tpl');
-       $o .= replace_macros($tpl, [
-                       '$field' => [$id, $label, $input_text, '', (($required) ? '*' : ''), 'placeholder="' . $readable_format . '"'],
-               ]);
-
-       $o .= "<script type='text/javascript'>";
-       $o .= "\$(function () {var picker = \$('#id_$id').datetimepicker({step:5,format:'$dateformat' $minjs $maxjs $pickers $defaultdatejs}); $extra_js})";
-       $o .= "</script>";
-
-       return $o;
+function datetimesel($min, $max, $default, $label, $id = 'datetimepicker', $pickdate = true, $picktime = true, $minfrom = '', $maxfrom = '', $required = false) {
+       return Temporal::getDateTimeField($min, $max, $default, $label, $id, $pickdate, $picktime, $minfrom, $maxfrom, $required);
 }
 
-/**
- * @brief Returns a relative date string.
- *
- * Implements "3 seconds ago" etc.
- * Based on $posted_date, (UTC).
- * Results relative to current timezone.
- * Limited to range of timestamps.
- *
- * @param string $posted_date MySQL-formatted date string (YYYY-MM-DD HH:MM:SS)
- * @param string $format (optional) Parsed with sprintf()
- *    <tt>%1$d %2$s ago</tt>, e.g. 22 hours ago, 1 minute ago
- *
- * @return string with relative date
- */
 function relative_date($posted_date, $format = null) {
-
-       $localtime = $posted_date . ' UTC';
-
-       $abs = strtotime($localtime);
-
-       if (is_null($posted_date) || $posted_date <= NULL_DATE || $abs === false) {
-                return L10n::t('never');
-       }
-
-       $etime = time() - $abs;
-
-       if ($etime < 1) {
-               return L10n::t('less than a second ago');
-       }
-
-       $a = [ 12 * 30 * 24 * 60 * 60  =>  [L10n::t('year'),   L10n::t('years')],
-                               30 * 24 * 60 * 60       =>  [L10n::t('month'),  L10n::t('months')],
-                               7  * 24 * 60 * 60       =>  [L10n::t('week'),   L10n::t('weeks')],
-                               24 * 60 * 60            =>  [L10n::t('day'),    L10n::t('days')],
-                               60 * 60                 =>  [L10n::t('hour'),   L10n::t('hours')],
-                               60                      =>  [L10n::t('minute'), L10n::t('minutes')],
-                               1                       =>  [L10n::t('second'), L10n::t('seconds')]
-       ];
-
-       foreach ($a as $secs => $str) {
-               $d = $etime / $secs;
-               if ($d >= 1) {
-                       $r = round($d);
-                       // translators - e.g. 22 hours ago, 1 minute ago
-                       if (!$format) {
-                               $format = L10n::t('%1$d %2$s ago');
-                       }
-
-                       return sprintf($format, $r, (($r == 1) ? $str[0] : $str[1]));
-               }
-       }
+       return Temporal::getRelativeDate($posted_date, $format);
 }
 
-/**
- * @brief Returns timezone correct age in years.
- *
- * Returns the age in years, given a date of birth, the timezone of the person
- * whose date of birth is provided, and the timezone of the person viewing the
- * result.
- *
- * Why? Bear with me. Let's say I live in Mittagong, Australia, and my birthday
- * is on New Year's. You live in San Bruno, California.
- * When exactly are you going to see my age increase?
- *
- * A: 5:00 AM Dec 31 San Bruno time. That's precisely when I start celebrating
- * and become a year older. If you wish me happy birthday on January 1
- * (San Bruno time), you'll be a day late.
- *
- * @param string $dob Date of Birth
- * @param string $owner_tz (optional) Timezone of the person of interest
- * @param string $viewer_tz (optional) Timezone of the person viewing
- *
- * @return int Age in years
- */
 function age($dob, $owner_tz = '', $viewer_tz = '') {
-       if (! intval($dob)) {
-               return 0;
-       }
-       if (! $owner_tz) {
-               $owner_tz = date_default_timezone_get();
-       }
-       if (! $viewer_tz) {
-               $viewer_tz = date_default_timezone_get();
-       }
-
-       $birthdate = datetime_convert('UTC', $owner_tz,$dob . ' 00:00:00+00:00','Y-m-d');
-       list($year, $month, $day) = explode("-", $birthdate);
-       $year_diff  = datetime_convert('UTC',$viewer_tz, 'now', 'Y') - $year;
-       $curr_month = datetime_convert('UTC',$viewer_tz, 'now', 'm');
-       $curr_day   = datetime_convert('UTC',$viewer_tz, 'now', 'd');
-
-       if (($curr_month < $month) || (($curr_month == $month) && ($curr_day < $day))) {
-               $year_diff--;
-       }
-
-       return $year_diff;
+       return Temporal::getAgeByTimezone($dob, $owner_tz, $viewer_tz);
 }
 
-/**
- * @brief Get days of a month in a given year.
- *
- * Returns number of days in the month of the given year.
- * $m = 1 is 'January' to match human usage.
- *
- * @param int $y Year
- * @param int $m Month (1=January, 12=December)
- *
- * @return int Number of days in the given month
- */
 function get_dim($y, $m) {
-
-       $dim = [ 0,
-               31, 28, 31, 30, 31, 30,
-               31, 31, 30, 31, 30, 31];
-
-       if ($m != 2) {
-               return $dim[$m];
-       } elseif (((($y % 4) == 0) && (($y % 100) != 0)) || (($y % 400) == 0)) {
-               return 29;
-       }
-
-       return $dim[2];
+       return Temporal::getDaysInMonth($y, $m);
 }
 
-/**
- * @brief Returns the first day in month for a given month, year.
- *
- * Months start at 1.
- *
- * @param int $y Year
- * @param int $m Month (1=January, 12=December)
- *
- * @return string day 0 = Sunday through 6 = Saturday
- */
 function get_first_dim($y,$m) {
-       $d = sprintf('%04d-%02d-01 00:00', intval($y), intval($m));
-
-       return datetime_convert('UTC','UTC',$d,'w');
+       return Temporal::getFirstDayInMonth($y, $m);
 }
 
-/**
- * @brief Output a calendar for the given month, year.
- *
- * If $links are provided (array), e.g. $links[12] => 'http://mylink' ,
- * date 12 will be linked appropriately. Today's date is also noted by
- * altering td class.
- * Months count from 1.
- *
- * @param int    $y Year
- * @param int    $m Month
- * @param array  $links (default null)
- * @param string $class
- *
- * @return string
- *
- * @todo Provide (prev,next) links, define class variations for different size calendars
- */
 function cal($y = 0, $m = 0, $links = null, $class = '')
 {
-       // month table - start at 1 to match human usage.
-       $mtab = [' ',
-               'January', 'February', 'March',
-               'April'  , 'May'     , 'June',
-               'July'   , 'August'  , 'September',
-               'October', 'November', 'December'
-       ];
-
-       $thisyear = datetime_convert('UTC', date_default_timezone_get(), 'now', 'Y');
-       $thismonth = datetime_convert('UTC', date_default_timezone_get(), 'now', 'm');
-       if (!$y) {
-               $y = $thisyear;
-       }
-
-       if (!$m) {
-               $m = intval($thismonth);
-       }
-
-       $dn = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
-       $f = get_first_dim($y, $m);
-       $l = get_dim($y, $m);
-       $d = 1;
-       $dow = 0;
-       $started = false;
-
-       if (($y == $thisyear) && ($m == $thismonth)) {
-               $tddate = intval(datetime_convert('UTC', date_default_timezone_get(), 'now', 'j'));
-       }
-
-       $str_month = day_translate($mtab[$m]);
-       $o = '<table class="calendar' . $class . '">';
-       $o .= "<caption>$str_month $y</caption><tr>";
-       for ($a = 0; $a < 7; $a ++) {
-               $o .= '<th>' . mb_substr(day_translate($dn[$a]), 0, 3, 'UTF-8') . '</th>';
-       }
-
-       $o .= '</tr><tr>';
-
-       while ($d <= $l) {
-               if (($dow == $f) && (! $started)) {
-                       $started = true;
-               }
-
-               $today = (((isset($tddate)) && ($tddate == $d)) ? "class=\"today\" " : '');
-               $o .= "<td $today>";
-               $day = str_replace(' ', '&nbsp;', sprintf('%2.2d', $d));
-               if ($started) {
-                       if (x($links, $d) !== false) {
-                               $o .= "<a href=\"{$links[$d]}\">$day</a>";
-                       } else {
-                               $o .= $day;
-                       }
-
-                       $d ++;
-               } else {
-                       $o .= '&nbsp;';
-               }
-
-               $o .= '</td>';
-               $dow ++;
-               if (($dow == 7) && ($d <= $l)) {
-                       $dow = 0;
-                       $o .= '</tr><tr>';
-               }
-       }
-       if ($dow) {
-               for ($a = $dow; $a < 7; $a ++) {
-                       $o .= '<td>&nbsp;</td>';
-               }
-       }
-
-       $o .= '</tr></table>' . "\r\n";
-
-       return $o;
+       return Temporal::getCalendarTable($y, $m, $links, $class);
 }
 
-/**
- * @brief Create a birthday event.
- *
- * Update the year and the birthday.
- */
 function update_contact_birthdays() {
-
-       // This only handles foreign or alien networks where a birthday has been provided.
-       // In-network birthdays are handled within local_delivery
-
-       $r = q("SELECT * FROM `contact` WHERE `bd` != '' AND `bd` > '0001-01-01' AND SUBSTRING(`bd`, 1, 4) != `bdyear` ");
-       if (DBM::is_result($r)) {
-               foreach ($r as $rr) {
-
-                       logger('update_contact_birthday: ' . $rr['bd']);
-
-                       $nextbd = datetime_convert('UTC','UTC','now','Y') . substr($rr['bd'], 4);
-
-                       /*
-                        * Add new birthday event for this person
-                        *
-                        * $bdtext is just a readable placeholder in case the event is shared
-                        * with others. We will replace it during presentation to our $importer
-                        * to contain a sparkle link and perhaps a photo.
-                        */
-
-                       // Check for duplicates
-                       $s = q("SELECT `id` FROM `event` WHERE `uid` = %d AND `cid` = %d AND `start` = '%s' AND `type` = '%s' LIMIT 1",
-                               intval($rr['uid']),
-                               intval($rr['id']),
-                               dbesc(datetime_convert('UTC','UTC', $nextbd)),
-                               dbesc('birthday'));
-
-                       if (DBM::is_result($s)) {
-                               continue;
-                       }
-
-                       $bdtext = L10n::t('%s\'s birthday', $rr['name']);
-                       $bdtext2 = L10n::t('Happy Birthday %s', ' [url=' . $rr['url'] . ']' . $rr['name'] . '[/url]');
-
-                       q("INSERT INTO `event` (`uid`,`cid`,`created`,`edited`,`start`,`finish`,`summary`,`desc`,`type`,`adjust`)
-                               VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%d' ) ",
-                               intval($rr['uid']),
-                               intval($rr['id']),
-                               dbesc(datetime_convert()),
-                               dbesc(datetime_convert()),
-                               dbesc(datetime_convert('UTC','UTC', $nextbd)),
-                               dbesc(datetime_convert('UTC','UTC', $nextbd . ' + 1 day ')),
-                               dbesc($bdtext),
-                               dbesc($bdtext2),
-                               dbesc('birthday'),
-                               intval(0)
-                       );
-
-
-                       // update bdyear
-                       q("UPDATE `contact` SET `bdyear` = '%s', `bd` = '%s' WHERE `uid` = %d AND `id` = %d",
-                               dbesc(substr($nextbd,0,4)),
-                               dbesc($nextbd),
-                               intval($rr['uid']),
-                               intval($rr['id'])
-                       );
-
-               }
-       }
+       return Contact::updateBirthdays();
 }
index 154217a4c50a06049d82cb77e759ccb0365e4bb5..f6bab9e3c58e0eb85a6ebae86495da91652dd9cd 100644 (file)
@@ -1,7 +1,10 @@
 <?php
+
+use Friendica\Core\L10n;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
 use Friendica\Database\DBStructure;
+use Friendica\Util\DateTimeFormat;
 
 require_once('include/datetime.php');
 
@@ -187,7 +190,7 @@ class dba {
 
                        if ($log) {
                                $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
-                               @file_put_contents($a->config["system"]["db_log_index"], datetime_convert()."\t".
+                               @file_put_contents($a->config["system"]["db_log_index"], DateTimeFormat::utcNow()."\t".
                                                $row['key']."\t".$row['rows']."\t".$row['Extra']."\t".
                                                basename($backtrace[1]["file"])."\t".
                                                $backtrace[1]["line"]."\t".$backtrace[2]["function"]."\t".
@@ -492,7 +495,7 @@ class dba {
                                $duration = round($duration, 3);
                                $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
 
-                               @file_put_contents($a->config["system"]["db_log"], datetime_convert()."\t".$duration."\t".
+                               @file_put_contents($a->config["system"]["db_log"], DateTimeFormat::utcNow()."\t".$duration."\t".
                                                basename($backtrace[1]["file"])."\t".
                                                $backtrace[1]["line"]."\t".$backtrace[2]["function"]."\t".
                                                substr(self::replace_parameters($sql, $args), 0, 2000)."\n", FILE_APPEND);
index f07215da9711f6f863fdb7d5e23ce22841edd4b6..2b8c36e257d9c58929337feb927f3dd7c1093ae1 100644 (file)
@@ -2,12 +2,13 @@
 /**
  * @file include/enotify.php
  */
-use Friendica\App;
+
 use Friendica\Core\Addon;
 use Friendica\Core\Config;
 use Friendica\Core\L10n;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Emailer;
 
 require_once 'include/bbcode.php';
@@ -450,7 +451,7 @@ function notification($params)
                $datarray['name_cache'] = strip_tags(bbcode($params['source_name']));
                $datarray['url']   = $params['source_link'];
                $datarray['photo'] = $params['source_photo'];
-               $datarray['date']  = datetime_convert();
+               $datarray['date']  = DateTimeFormat::utcNow();
                $datarray['uid']   = $params['uid'];
                $datarray['link']  = $itemlink;
                $datarray['iid']   = $item_id;
index 48edeeae64c43414b42530705a722fd353f23622..647697e5a0f66c1762b80775ca119aca58ee29c7 100644 (file)
@@ -4,7 +4,6 @@
  * @brief functions specific to event handling
  */
 
-use Friendica\App;
 use Friendica\Content\Feature;
 use Friendica\Core\Addon;
 use Friendica\Core\L10n;
@@ -13,6 +12,7 @@ use Friendica\Core\System;
 use Friendica\Database\DBM;
 use Friendica\Model\Item;
 use Friendica\Model\Profile;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Map;
 
 require_once 'include/bbcode.php';
@@ -26,15 +26,17 @@ function format_event_html($ev, $simple = false) {
 
        $bd_format = L10n::t('l F d, Y \@ g:i A') ; // Friday January 18, 2011 @ 8 AM.
 
-       $event_start = (($ev['adjust']) ? day_translate(datetime_convert('UTC', date_default_timezone_get(),
-                       $ev['start'] , $bd_format ))
-                       : day_translate(datetime_convert('UTC', 'UTC',
-                       $ev['start'] , $bd_format)));
+       $event_start = day_translate(
+               $ev['adjust'] ?
+                       DateTimeFormat::local($ev['start'], $bd_format)
+                       : DateTimeFormat::utc($ev['start'], $bd_format)
+       );
 
-       $event_end = (($ev['adjust']) ? day_translate(datetime_convert('UTC', date_default_timezone_get(),
-                               $ev['finish'] , $bd_format ))
-                               : day_translate(datetime_convert('UTC', 'UTC',
-                               $ev['finish'] , $bd_format )));
+       $event_end = day_translate(
+               $ev['adjust'] ?
+                       DateTimeFormat::local($ev['finish'], $bd_format)
+                       : DateTimeFormat::utc($ev['finish'], $bd_format)
+       );
 
        if ($simple) {
                $o = "<h3>" . bbcode($ev['summary']) . "</h3>";
@@ -59,13 +61,13 @@ function format_event_html($ev, $simple = false) {
        $o .= '<div class="summary event-summary">' . bbcode($ev['summary']) . '</div>' . "\r\n";
 
        $o .= '<div class="event-start"><span class="event-label">' . L10n::t('Starts:') . '</span>&nbsp;<span class="dtstart" title="'
-               . datetime_convert('UTC', 'UTC', $ev['start'], (($ev['adjust']) ? ATOM_TIME : 'Y-m-d\TH:i:s' ))
+               . DateTimeFormat::utc($ev['start'], (($ev['adjust']) ? DateTimeFormat::ATOM : 'Y-m-d\TH:i:s' ))
                . '" >'.$event_start
                . '</span></div>' . "\r\n";
 
        if (! $ev['nofinish']) {
                $o .= '<div class="event-end" ><span class="event-label">' . L10n::t('Finishes:') . '</span>&nbsp;<span class="dtend" title="'
-                       . datetime_convert('UTC', 'UTC', $ev['finish'], (($ev['adjust']) ? ATOM_TIME : 'Y-m-d\TH:i:s' ))
+                       . DateTimeFormat::utc($ev['finish'], (($ev['adjust']) ? DateTimeFormat::ATOM : 'Y-m-d\TH:i:s' ))
                        . '" >'.$event_end
                        . '</span></div>' . "\r\n";
        }
@@ -198,8 +200,8 @@ function sort_by_date($a) {
 
 function ev_compare($a,$b) {
 
-       $date_a = (($a['adjust']) ? datetime_convert('UTC', date_default_timezone_get(), $a['start']) : $a['start']);
-       $date_b = (($b['adjust']) ? datetime_convert('UTC', date_default_timezone_get(), $b['start']) : $b['start']);
+       $date_a = (($a['adjust']) ? DateTimeFormat::local($a['start']) : $a['start']);
+       $date_b = (($b['adjust']) ? DateTimeFormat::local($b['start']) : $b['start']);
 
        if ($date_a === $date_b) {
                return strcasecmp($a['desc'], $b['desc']);
@@ -242,8 +244,8 @@ function event_store($arr) {
 
        $a = get_app();
 
-       $arr['created'] = (($arr['created'])     ? $arr['created']         : datetime_convert());
-       $arr['edited']  = (($arr['edited'])      ? $arr['edited']          : datetime_convert());
+       $arr['created'] = (($arr['created'])     ? $arr['created']         : DateTimeFormat::utcNow());
+       $arr['edited']  = (($arr['edited'])      ? $arr['edited']          : DateTimeFormat::utcNow());
        $arr['type']    = (($arr['type'])        ? $arr['type']            : 'event' );
        $arr['cid']     = ((intval($arr['cid'])) ? intval($arr['cid'])     : 0);
        $arr['uri']     = (x($arr, 'uri')        ? $arr['uri']             : item_new_uri($a->get_hostname(), $arr['uid']));
@@ -593,15 +595,15 @@ function process_events($arr) {
        $fmt = L10n::t('l, F j');
        if (count($arr)) {
                foreach ($arr as $rr) {
-                       $j = (($rr['adjust']) ? datetime_convert('UTC', date_default_timezone_get(), $rr['start'], 'j') : datetime_convert('UTC', 'UTC', $rr['start'], 'j'));
-                       $d = (($rr['adjust']) ? datetime_convert('UTC', date_default_timezone_get(), $rr['start'], $fmt) : datetime_convert('UTC', 'UTC', $rr['start'], $fmt));
+                       $j = (($rr['adjust']) ? DateTimeFormat::local($rr['start'], 'j') : DateTimeFormat::utc($rr['start'], 'j'));
+                       $d = (($rr['adjust']) ? DateTimeFormat::local($rr['start'], $fmt) : DateTimeFormat::utc($rr['start'], $fmt));
                        $d = day_translate($d);
 
-                       $start = (($rr['adjust']) ? datetime_convert('UTC', date_default_timezone_get(), $rr['start'], 'c') : datetime_convert('UTC', 'UTC', $rr['start'], 'c'));
+                       $start = (($rr['adjust']) ? DateTimeFormat::local($rr['start'], 'c') : DateTimeFormat::utc($rr['start'], 'c'));
                        if ($rr['nofinish']) {
                                $end = null;
                        } else {
-                               $end = (($rr['adjust']) ? datetime_convert('UTC', date_default_timezone_get(), $rr['finish'], 'c') : datetime_convert('UTC', 'UTC', $rr['finish'], 'c'));
+                               $end = (($rr['adjust']) ? DateTimeFormat::local($rr['finish'], 'c') : DateTimeFormat::utc($rr['finish'], 'c'));
                        }
 
                        $is_first = ($d !== $last_date);
@@ -926,22 +928,48 @@ function format_event_item($item) {
        $tformat       = L10n::t('g:i A'); // 8:01 AM.
 
        // Convert the time to different formats.
-       $dtstart_dt = (($item['event-adjust']) ? day_translate(datetime_convert('UTC', date_default_timezone_get(), $item['event-start'], $dformat)) : day_translate(datetime_convert('UTC', 'UTC', $item['event-start'], $dformat)));
-       $dtstart_title = datetime_convert('UTC', 'UTC', $item['event-start'], (($item['event-adjust']) ? ATOM_TIME : 'Y-m-d\TH:i:s'));
+       $dtstart_dt = day_translate(
+               $item['event-adjust'] ?
+                       DateTimeFormat::local($item['event-start'], $dformat)
+                       : DateTimeFormat::utc($item['event-start'], $dformat)
+       );
+       $dtstart_title = DateTimeFormat::utc($item['event-start'], $item['event-adjust'] ? DateTimeFormat::ATOM : 'Y-m-d\TH:i:s');
        // Format: Jan till Dec.
-       $month_short = (($item['event-adjust']) ? day_short_translate(datetime_convert('UTC', date_default_timezone_get(), $item['event-start'], 'M')) : day_short_translate(datetime_convert('UTC', 'UTC', $item['event-start'], 'M')));
+       $month_short = day_short_translate(
+               $item['event-adjust'] ?
+                       DateTimeFormat::local($item['event-start'], 'M')
+                       : DateTimeFormat::utc($item['event-start'], 'M')
+       );
        // Format: 1 till 31.
-       $date_short = (($item['event-adjust']) ? datetime_convert('UTC', date_default_timezone_get(), $item['event-start'], 'j') : datetime_convert('UTC', 'UTC', $item['event-start'], 'j'));
-       $start_time = (($item['event-adjust']) ? datetime_convert('UTC', date_default_timezone_get(), $item['event-start'], $tformat) : datetime_convert('UTC', 'UTC', $item['event-start'], $tformat));
-       $start_short = (($item['event-adjust']) ? day_short_translate(datetime_convert('UTC', date_default_timezone_get(), $item['event-start'], $dformat_short)) : day_short_translate(datetime_convert('UTC', 'UTC', $item['event-start'], $dformat_short)));
+       $date_short = $item['event-adjust'] ?
+               DateTimeFormat::local($item['event-start'], 'j')
+               : DateTimeFormat::utc($item['event-start'], 'j');
+       $start_time = $item['event-adjust'] ?
+               DateTimeFormat::local($item['event-start'], $tformat)
+               : DateTimeFormat::utc($item['event-start'], $tformat);
+       $start_short = day_short_translate(
+               $item['event-adjust'] ?
+                       DateTimeFormat::local($item['event-start'], $dformat_short)
+                       : DateTimeFormat::utc($item['event-start'], $dformat_short)
+       );
 
        // If the option 'nofinisch' isn't set, we need to format the finish date/time.
        if (!$item['event-nofinish']) {
                $finish = true;
-               $dtend_dt  = (($item['event-adjust']) ? day_translate(datetime_convert('UTC', date_default_timezone_get(), $item['event-finish'], $dformat)) : day_translate(datetime_convert('UTC', 'UTC', $item['event-finish'], $dformat)));
-               $dtend_title = datetime_convert('UTC', 'UTC', $item['event-finish'], (($item['event-adjust'])   ? ATOM_TIME : 'Y-m-d\TH:i:s'));
-               $end_short = (($item['event-adjust']) ? day_short_translate(datetime_convert('UTC', date_default_timezone_get(), $item['event-finish'], $dformat_short)) : day_short_translate(datetime_convert('UTC', 'UTC', $item['event-finish'], $dformat_short)));
-               $end_time = (($item['event-adjust']) ? datetime_convert('UTC', date_default_timezone_get(), $item['event-finish'], $tformat) : datetime_convert('UTC', 'UTC', $item['event-finish'], $tformat));
+               $dtend_dt  = day_translate(
+                       $item['event-adjust'] ?
+                               DateTimeFormat::local($item['event-finish'], $dformat)
+                               : DateTimeFormat::utc($item['event-finish'], $dformat)
+               );
+               $dtend_title = DateTimeFormat::utc($item['event-finish'], $item['event-adjust'] ? DateTimeFormat::ATOM : 'Y-m-d\TH:i:s');
+               $end_short = day_short_translate(
+                       $item['event-adjust'] ?
+                               DateTimeFormat::local($item['event-finish'], $dformat_short)
+                               : DateTimeFormat::utc($item['event-finish'], $dformat_short)
+               );
+               $end_time = $item['event-adjust'] ?
+                       DateTimeFormat::local($item['event-finish'], $tformat)
+                       : DateTimeFormat::utc($item['event-finish'], $tformat);
                // Check if start and finish time is at the same day.
                if (substr($dtstart_title, 0, 10) === substr($dtend_title, 0, 10)) {
                        $same_date = true;
index 884b91393bf4ad423cb82820486569ab3c979a3b..f1c895f90fece19a2aac720a9d5fa1835c8b4b0b 100644 (file)
@@ -2,26 +2,19 @@
 /**
  * @file include/items.php
  */
-use Friendica\App;
+
 use Friendica\Content\Feature;
 use Friendica\Core\Addon;
 use Friendica\Core\Config;
 use Friendica\Core\L10n;
 use Friendica\Core\PConfig;
-use Friendica\Core\Worker;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
-use Friendica\Model\Contact;
-use Friendica\Model\GContact;
-use Friendica\Model\Group;
-use Friendica\Model\Term;
-use Friendica\Model\User;
 use Friendica\Model\Item;
-use Friendica\Model\Conversation;
-use Friendica\Object\Image;
 use Friendica\Protocol\DFRN;
-use Friendica\Protocol\OStatus;
 use Friendica\Protocol\Feed;
+use Friendica\Protocol\OStatus;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
 use Friendica\Util\ParseUrl;
 
@@ -415,7 +408,7 @@ function drop_item($id) {
 
 /* arrange the list in years */
 function list_post_dates($uid, $wall) {
-       $dnow = datetime_convert('',date_default_timezone_get(), 'now','Y-m-d');
+       $dnow = DateTimeFormat::localNow('Y-m-d');
 
        $dthen = Item::firstPostDate($uid, $wall);
        if (!$dthen) {
@@ -436,14 +429,14 @@ function list_post_dates($uid, $wall) {
                $dyear = intval(substr($dnow, 0, 4));
                $dstart = substr($dnow, 0, 8) . '01';
                $dend = substr($dnow, 0, 8) . get_dim(intval($dnow), intval(substr($dnow, 5)));
-               $start_month = datetime_convert('', '', $dstart, 'Y-m-d');
-               $end_month = datetime_convert('', '', $dend, 'Y-m-d');
-               $str = day_translate(datetime_convert('', '', $dnow, 'F'));
+               $start_month = DateTimeFormat::utc($dstart, 'Y-m-d');
+               $end_month = DateTimeFormat::utc($dend, 'Y-m-d');
+               $str = day_translate(DateTimeFormat::utc($dnow, 'F'));
                if (!$ret[$dyear]) {
                        $ret[$dyear] = [];
                }
                $ret[$dyear][] = [$str, $end_month, $start_month];
-               $dnow = datetime_convert('', '', $dnow . ' -1 month', 'Y-m-d');
+               $dnow = DateTimeFormat::utc($dnow . ' -1 month', 'Y-m-d');
        }
        return $ret;
 }
@@ -473,7 +466,7 @@ function posted_date_widget($url, $uid, $wall) {
                return $o;
        }
 
-       $cutoff_year = intval(datetime_convert('',date_default_timezone_get(), 'now', 'Y')) - $visible_years;
+       $cutoff_year = intval(DateTimeFormat::localNow('Y')) - $visible_years;
        $cutoff = ((array_key_exists($cutoff_year, $ret))? true : false);
 
        $o = replace_macros(get_markup_template('posted_date_widget.tpl'),[
index 00115429388ffad097e6efa37dcba0a7029ab84b..45f8d86b10f4808238059e97515cd5fc3eeffb1f 100644 (file)
@@ -2,7 +2,7 @@
 /**
  * @file include/security.php
  */
-use Friendica\App;
+
 use Friendica\Core\Addon;
 use Friendica\Core\Config;
 use Friendica\Core\L10n;
@@ -10,6 +10,7 @@ use Friendica\Core\PConfig;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
 use Friendica\Model\Group;
+use Friendica\Util\DateTimeFormat;
 
 /**
  * @brief Calculate the hash that is needed for the "Friendica" cookie
@@ -141,10 +142,10 @@ function authenticate_success($user_record, $login_initial = false, $interactive
        header('X-Account-Management-Status: active; name="' . $a->user['username'] . '"; id="' . $a->user['nickname'] . '"');
 
        if ($login_initial || $login_refresh) {
-               dba::update('user', ['login_date' => datetime_convert()], ['uid' => $_SESSION['uid']]);
+               dba::update('user', ['login_date' => DateTimeFormat::utcNow()], ['uid' => $_SESSION['uid']]);
 
                // Set the login date for all identities of the user
-               dba::update('user', ['login_date' => datetime_convert()],
+               dba::update('user', ['login_date' => DateTimeFormat::utcNow()],
                        ['password' => $master_record['password'], 'email' => $master_record['email'], 'account_removed' => false]);
        }
 
index ab0d707e7a6e6b63e2a177fdf47bebada21b5524..dc604124fd4bb8fbab371d7035447809ab026a03 100644 (file)
@@ -2,6 +2,7 @@
 /**
  * @file include/text.php
  */
+
 use Friendica\App;
 use Friendica\Content\ContactSelector;
 use Friendica\Content\Feature;
@@ -14,6 +15,7 @@ use Friendica\Core\System;
 use Friendica\Database\DBM;
 use Friendica\Model\Profile;
 use Friendica\Model\Term;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Map;
 
 require_once "mod/proxy.php";
@@ -691,7 +693,7 @@ function logger($msg, $level = 0) {
 
        $callers = debug_backtrace();
        $logline = sprintf("%s@%s\t[%s]:%s:%s:%s\t%s\n",
-                       datetime_convert('UTC', 'UTC', 'now', 'Y-m-d\TH:i:s\Z'),
+                       DateTimeFormat::utcNow(DateTimeFormat::ATOM),
                        $process_id,
                        $LOGGER_LEVELS[$level],
                        basename($callers[0]['file']),
@@ -757,7 +759,7 @@ function dlogger($msg, $level = 0) {
 
        $callers = debug_backtrace();
        $logline = sprintf("%s@\t%s:\t%s:\t%s\t%s\t%s\n",
-                       datetime_convert(),
+                       DateTimeFormat::utcNow(),
                        $process_id,
                        basename($callers[0]['file']),
                        $callers[0]['line'],
index d7495340b4c961932c84e7ec81732ff3263ee5a6..5d6a8fbafdd29f2b95b7426b5fb911880c8d6532 100644 (file)
@@ -17,9 +17,10 @@ use Friendica\Core\Worker;
 use Friendica\Database\DBM;
 use Friendica\Database\DBStructure;
 use Friendica\Model\Contact;
-use Friendica\Model\User;
 use Friendica\Model\Item;
+use Friendica\Model\User;
 use Friendica\Module\Login;
+use Friendica\Util\DateTimeFormat;
 
 require_once 'include/enotify.php';
 require_once 'include/text.php';
@@ -739,7 +740,7 @@ function admin_page_summary(App $a)
        if (!$last_worker_call) {
                $showwarning = true;
                $warningtext[] = L10n::t('The worker was never executed. Please check your database structure!');
-       } elseif ((strtotime(datetime_convert()) - strtotime($last_worker_call)) > 60 * 60) {
+       } elseif ((strtotime(DateTimeFormat::utcNow()) - strtotime($last_worker_call)) > 60 * 60) {
                $showwarning = true;
                $warningtext[] = L10n::t('The last worker execution was on %s UTC. This is older than one hour. Please check your crontab settings.', $last_worker_call);
        }
index a59643cfc2dfd163583e4563ff3aa35d664a31aa..cafef3e300beede45824bccdb0f33eb44480831a 100644 (file)
@@ -5,6 +5,7 @@
  *     This calendar is for profile visitors and contains only the events
  *     of the profile owner
  */
+
 use Friendica\App;
 use Friendica\Content\Feature;
 use Friendica\Content\Nav;
@@ -16,6 +17,7 @@ use Friendica\Model\Contact;
 use Friendica\Model\Group;
 use Friendica\Model\Profile;
 use Friendica\Protocol\DFRN;
+use Friendica\Util\DateTimeFormat;
 
 require_once 'include/event.php';
 
@@ -150,8 +152,8 @@ function cal_content(App $a)
 
        // The view mode part is similiar to /mod/events.php
        if ($mode == 'view') {
-               $thisyear = datetime_convert('UTC', date_default_timezone_get(), 'now', 'Y');
-               $thismonth = datetime_convert('UTC', date_default_timezone_get(), 'now', 'm');
+               $thisyear = DateTimeFormat::localNow('Y');
+               $thismonth = DateTimeFormat::localNow('m');
                if (!$y) {
                        $y = intval($thisyear);
                }
@@ -201,11 +203,11 @@ function cal_content(App $a)
                        }
                }
 
-               $start = datetime_convert('UTC', 'UTC', $start);
-               $finish = datetime_convert('UTC', 'UTC', $finish);
+               $start = DateTimeFormat::utc($start);
+               $finish = DateTimeFormat::utc($finish);
 
-               $adjust_start = datetime_convert('UTC', date_default_timezone_get(), $start);
-               $adjust_finish = datetime_convert('UTC', date_default_timezone_get(), $finish);
+               $adjust_start = DateTimeFormat::local($start);
+               $adjust_finish = DateTimeFormat::local($finish);
 
                // put the event parametes in an array so we can better transmit them
                $event_params = [
@@ -229,7 +231,7 @@ function cal_content(App $a)
                if (DBM::is_result($r)) {
                        $r = sort_by_date($r);
                        foreach ($r as $rr) {
-                               $j = (($rr['adjust']) ? datetime_convert('UTC', date_default_timezone_get(), $rr['start'], 'j') : datetime_convert('UTC', 'UTC', $rr['start'], 'j'));
+                               $j = $rr['adjust'] ? DateTimeFormat::local($rr['start'], 'j') : DateTimeFormat::utc($rr['start'], 'j');
                                if (!x($links, $j)) {
                                        $links[$j] = System::baseUrl() . '/' . $a->cmd . '#link-' . $j;
                                }
index 12f6075dd6f26fa0b47a9bb6b98da2fafde31a0f..c37c4f3d5076ba2a8e40cee4309ea34b6a769524 100644 (file)
@@ -2,6 +2,7 @@
 /**
  * @file mod/contacts.php
  */
+
 use Friendica\App;
 use Friendica\Content\ContactSelector;
 use Friendica\Content\Nav;
@@ -16,6 +17,7 @@ use Friendica\Model\GContact;
 use Friendica\Model\Group;
 use Friendica\Model\Profile;
 use Friendica\Network\Probe;
+use Friendica\Util\DateTimeFormat;
 
 require_once 'mod/proxy.php';
 
@@ -538,7 +540,7 @@ function contacts_content(App $a)
 
                $insecure = L10n::t('Private communications are not available for this contact.');
 
-               $last_update = (($contact['last-update'] <= NULL_DATE) ? L10n::t('Never') : datetime_convert('UTC', date_default_timezone_get(), $contact['last-update'], 'D, j M Y, g:i A'));
+               $last_update = (($contact['last-update'] <= NULL_DATE) ? L10n::t('Never') : DateTimeFormat::local($contact['last-update'], 'D, j M Y, g:i A'));
 
                if ($contact['last-update'] > NULL_DATE) {
                        $last_update .= ' ' . (($contact['last-update'] <= $contact['success_update']) ? L10n::t("\x28Update was successful\x29") : L10n::t("\x28Update was not successful\x29"));
@@ -552,7 +554,7 @@ function contacts_content(App $a)
                // tabs
                $tab_str = contacts_tab($a, $contact_id, 2);
 
-               $lost_contact = (($contact['archive'] && $contact['term-date'] > NULL_DATE && $contact['term-date'] < datetime_convert('', '', 'now')) ? L10n::t('Communications lost with this contact!') : '');
+               $lost_contact = (($contact['archive'] && $contact['term-date'] > NULL_DATE && $contact['term-date'] < DateTimeFormat::utcNow()) ? L10n::t('Communications lost with this contact!') : '');
 
                $fetch_further_information = null;
                if ($contact['network'] == NETWORK_FEED) {
index 9106f588028a7c5587ab6be6db09c16c1b2f7b52..d5264aa056e7954b02ccdf97842aeca414084a88 100644 (file)
@@ -31,6 +31,7 @@ use Friendica\Model\User;
 use Friendica\Network\Probe;
 use Friendica\Protocol\Diaspora;
 use Friendica\Util\Crypto;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
 use Friendica\Util\XML;
 
@@ -326,8 +327,8 @@ function dfrn_confirm_post(App $a, $handsfree = null)
                                `network` = '%s' WHERE `id` = %d
                        ",
                                intval($new_relation),
-                               dbesc(datetime_convert()),
-                               dbesc(datetime_convert()),
+                               dbesc(DateTimeFormat::utcNow()),
+                               dbesc(DateTimeFormat::utcNow()),
                                intval($duplex),
                                intval($hidden),
                                dbesc(NETWORK_DFRN),
@@ -377,8 +378,8 @@ function dfrn_confirm_post(App $a, $handsfree = null)
                                `rel` = %d
                                WHERE `id` = %d
                        ",
-                               dbesc(datetime_convert()),
-                               dbesc(datetime_convert()),
+                               dbesc(DateTimeFormat::utcNow()),
+                               dbesc(DateTimeFormat::utcNow()),
                                dbesc($addr),
                                dbesc($notify),
                                dbesc($poll),
@@ -618,8 +619,8 @@ function dfrn_confirm_post(App $a, $handsfree = null)
                        `network` = '%s' WHERE `id` = %d
                ",
                        intval($new_relation),
-                       dbesc(datetime_convert()),
-                       dbesc(datetime_convert()),
+                       dbesc(DateTimeFormat::utcNow()),
+                       dbesc(DateTimeFormat::utcNow()),
                        intval($duplex),
                        intval($forum),
                        intval($prv),
index 41d13ff8118177338f5cdead6c599469ea80b64f..34cc9cf258032308ef7cb88ff241f23d407492f0 100644 (file)
@@ -11,6 +11,7 @@
  *    You also find a graphic which describes the confirmation process at
  *    https://github.com/friendica/friendica/blob/master/spec/dfrn2_contact_request.png
  */
+
 use Friendica\App;
 use Friendica\Core\Config;
 use Friendica\Core\L10n;
@@ -19,10 +20,11 @@ use Friendica\Core\System;
 use Friendica\Database\DBM;
 use Friendica\Model\Contact;
 use Friendica\Model\Group;
-use Friendica\Model\User;
 use Friendica\Model\Profile;
+use Friendica\Model\User;
 use Friendica\Module\Login;
 use Friendica\Network\Probe;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
 
 require_once 'include/enotify.php';
@@ -135,7 +137,7 @@ function dfrn_request_post(App $a)
                                                `request`, `confirm`, `notify`, `poll`, `poco`, `network`, `aes_allow`, `hidden`, `blocked`, `pending`)
                                                VALUES ( %d, '%s', '%s', '%s', '%s', '%s' , '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, %d)",
                                                intval(local_user()),
-                                               datetime_convert(),
+                                               DateTimeFormat::utcNow(),
                                                dbesc($dfrn_url),
                                                dbesc(normalise_link($dfrn_url)),
                                                $parms['addr'],
@@ -239,7 +241,7 @@ function dfrn_request_post(App $a)
                // Block friend request spam
                if ($maxreq) {
                        $r = q("SELECT * FROM `intro` WHERE `datetime` > '%s' AND `uid` = %d",
-                               dbesc(datetime_convert('UTC', 'UTC', 'now - 24 hours')),
+                               dbesc(DateTimeFormat::utc('now - 24 hours')),
                                intval($uid)
                        );
                        if (DBM::is_result($r) && count($r) > $maxreq) {
@@ -380,7 +382,7 @@ function dfrn_request_post(App $a)
                                        `request`, `confirm`, `notify`, `poll`, `poco`, `network`, `blocked`, `pending` )
                                        VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d )",
                                        intval($uid),
-                                       dbesc(datetime_convert()),
+                                       dbesc(DateTimeFormat::utcNow()),
                                        $parms['url'],
                                        dbesc(normalise_link($url)),
                                        $parms['addr'],
@@ -428,7 +430,7 @@ function dfrn_request_post(App $a)
                                        ((x($_POST,'knowyou') && ($_POST['knowyou'] == 1)) ? 1 : 0),
                                        dbesc(notags(trim($_POST['dfrn-request-message']))),
                                        dbesc($hash),
-                                       dbesc(datetime_convert())
+                                       dbesc(DateTimeFormat::utcNow())
                                );
                        }
 
index 8dec6146067541aea7b6adf9fc183fdb316e3be1..4f45c61bf549f83013bafecc38afccbb8698c3d8 100644 (file)
@@ -3,15 +3,16 @@
  * @file mod/events.php
  * @brief The events module
  */
+
 use Friendica\App;
 use Friendica\Content\Nav;
-use Friendica\Core\Config;
 use Friendica\Core\L10n;
 use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
-use Friendica\Model\Profile;
 use Friendica\Model\Item;
+use Friendica\Model\Profile;
+use Friendica\Util\DateTimeFormat;
 
 require_once 'include/bbcode.php';
 require_once 'include/datetime.php';
@@ -75,14 +76,14 @@ function events_post(App $a) {
        }
 
        if ($adjust) {
-               $start = datetime_convert(date_default_timezone_get(), 'UTC', $start);
+               $start = DateTimeFormat::convert($start, 'UTC', date_default_timezone_get());
                if (! $nofinish) {
-                       $finish = datetime_convert(date_default_timezone_get(), 'UTC', $finish);
+                       $finish = DateTimeFormat::convert($finish, 'UTC', date_default_timezone_get());
                }
        } else {
-               $start = datetime_convert('UTC', 'UTC', $start);
+               $start = DateTimeFormat::utc($start);
                if (! $nofinish) {
-                       $finish = datetime_convert('UTC', 'UTC', $finish);
+                       $finish = DateTimeFormat::utc($finish);
                }
        }
 
@@ -275,8 +276,8 @@ function events_content(App $a) {
        // The view mode part is similiar to /mod/cal.php
        if ($mode == 'view') {
 
-               $thisyear  = datetime_convert('UTC', date_default_timezone_get(), 'now', 'Y');
-               $thismonth = datetime_convert('UTC', date_default_timezone_get(), 'now', 'm');
+               $thisyear  = DateTimeFormat::localNow('Y');
+               $thismonth = DateTimeFormat::localNow('m');
                if (! $y) {
                        $y = intval($thisyear);
                }
@@ -322,11 +323,11 @@ function events_content(App $a) {
                        }
                }
 
-               $start  = datetime_convert('UTC', 'UTC', $start);
-               $finish = datetime_convert('UTC', 'UTC', $finish);
+               $start  = DateTimeFormat::utc($start);
+               $finish = DateTimeFormat::utc($finish);
 
-               $adjust_start  = datetime_convert('UTC', date_default_timezone_get(), $start);
-               $adjust_finish = datetime_convert('UTC', date_default_timezone_get(), $finish);
+               $adjust_start  = DateTimeFormat::local($start);
+               $adjust_finish = DateTimeFormat::local($finish);
 
                // put the event parametes in an array so we can better transmit them
                $event_params = [
@@ -350,7 +351,7 @@ function events_content(App $a) {
                if (DBM::is_result($r)) {
                        $r = sort_by_date($r);
                        foreach ($r as $rr) {
-                               $j = (($rr['adjust']) ? datetime_convert('UTC', date_default_timezone_get(), $rr['start'], 'j') : datetime_convert('UTC', 'UTC', $rr['start'], 'j'));
+                               $j = $rr['adjust'] ? DateTimeFormat::local($rr['start'], 'j') : DateTimeFormat::utc($rr['start'], 'j');
                                if (! x($links,$j)) {
                                        $links[$j] = System::baseUrl() . '/' . $a->cmd . '#link-' . $j;
                                }
@@ -464,19 +465,19 @@ function events_content(App $a) {
                        $tz = (($orig_event['adjust']) ? date_default_timezone_get() : 'UTC');
                }
 
-               $syear  = datetime_convert('UTC', $tz, $sdt, 'Y');
-               $smonth = datetime_convert('UTC', $tz, $sdt, 'm');
-               $sday   = datetime_convert('UTC', $tz, $sdt, 'd');
+               $syear  = DateTimeFormat::convert($sdt, $tz, 'UTC', 'Y');
+               $smonth = DateTimeFormat::convert($sdt, $tz, 'UTC', 'm');
+               $sday   = DateTimeFormat::convert($sdt, $tz, 'UTC', 'd');
 
-               $shour   = ((x($orig_event)) ? datetime_convert('UTC', $tz, $sdt, 'H') : 0);
-               $sminute = ((x($orig_event)) ? datetime_convert('UTC', $tz, $sdt, 'i') : 0);
+               $shour   = ((x($orig_event)) ? DateTimeFormat::convert($sdt, $tz, 'UTC', 'H') : '00');
+               $sminute = ((x($orig_event)) ? DateTimeFormat::convert($sdt, $tz, 'UTC', 'i') : '00');
 
-               $fyear  = datetime_convert('UTC', $tz, $fdt, 'Y');
-               $fmonth = datetime_convert('UTC', $tz, $fdt, 'm');
-               $fday   = datetime_convert('UTC', $tz, $fdt, 'd');
+               $fyear  = DateTimeFormat::convert($fdt, $tz, 'UTC', 'Y');
+               $fmonth = DateTimeFormat::convert($fdt, $tz, 'UTC', 'm');
+               $fday   = DateTimeFormat::convert($fdt, $tz, 'UTC', 'd');
 
-               $fhour   = ((x($orig_event)) ? datetime_convert('UTC', $tz, $fdt, 'H') : 0);
-               $fminute = ((x($orig_event)) ? datetime_convert('UTC', $tz, $fdt, 'i') : 0);
+               $fhour   = ((x($orig_event)) ? DateTimeFormat::convert($fdt, $tz, 'UTC', 'H') : '00');
+               $fminute = ((x($orig_event)) ? DateTimeFormat::convert($fdt, $tz, 'UTC', 'i') : '00');
 
                require_once 'include/acl_selectors.php' ;
 
index 99a7f7d525d775b373349c7073e39074c4715ce3..86878a5295c0463af912ac405a45fbdbb6f11158 100644 (file)
@@ -2,10 +2,12 @@
 /**
  * @file mod/fsuggest.php
  */
+
 use Friendica\App;
 use Friendica\Core\L10n;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
+use Friendica\Util\DateTimeFormat;
 
 function fsuggest_post(App $a)
 {
@@ -50,7 +52,7 @@ function fsuggest_post(App $a)
                                dbesc($r[0]['request']),
                                dbesc($r[0]['photo']),
                                dbesc($hash),
-                               dbesc(datetime_convert())
+                               dbesc(DateTimeFormat::utcNow())
                        );
                        $r = q("SELECT `id` FROM `fsuggest` WHERE `note` = '%s' AND `uid` = %d LIMIT 1",
                                dbesc($hash),
index c5f2e985f9cf5689e0dbee96188856c134394281..1ddc8fbad1d6b13ac88191c83c2d5c5174bbeec9 100644 (file)
@@ -2,6 +2,7 @@
 /**
  * @file mod/install.php
  */
+
 use Friendica\App;
 use Friendica\Core\L10n;
 use Friendica\Core\System;
@@ -9,6 +10,7 @@ use Friendica\Database\DBM;
 use Friendica\Database\DBStructure;
 use Friendica\Object\Image;
 use Friendica\Util\Network;
+use Friendica\Util\Temporal;
 
 $install_wizard_pass = 1;
 
@@ -279,7 +281,7 @@ function install_content(App $a) {
                                '$adminmail' => ['adminmail', L10n::t('Site administrator email address'), $adminmail, L10n::t('Your account email address must match this in order to use the web admin panel.'), 'required', 'autofocus', 'email'],
 
 
-                               '$timezone' => field_timezone('timezone', L10n::t('Please select a default timezone for your website'), $timezone, ''),
+                               '$timezone' => Temporal::getTimezoneField('timezone', L10n::t('Please select a default timezone for your website'), $timezone, ''),
                                '$language' => ['language', L10n::t('System Language:'), 'en', L10n::t('Set the default language for your Friendica installation interface and to send emails.'), $lang_choices],
                                '$baseurl' => System::baseUrl(),
 
index 2caba92efc4151ddc5dd15c7a585c7358cd94be6..d638b860b4236dcc79e9de7e75c45646872672f9 100644 (file)
@@ -5,12 +5,14 @@
  * Send email invitations to join social network
  *
  */
+
 use Friendica\App;
 use Friendica\Core\Config;
 use Friendica\Core\L10n;
 use Friendica\Core\PConfig;
 use Friendica\Core\System;
 use Friendica\Protocol\Email;
+use Friendica\Util\DateTimeFormat;
 
 function invite_post(App $a)
 {
@@ -60,7 +62,7 @@ function invite_post(App $a)
 
                        $r = q("INSERT INTO `register` (`hash`,`created`) VALUES ('%s', '%s') ",
                                dbesc($code),
-                               dbesc(datetime_convert())
+                               dbesc(DateTimeFormat::utcNow())
                        );
 
                        if (! is_site_admin()) {
index 46a7b184c13770673ec93b90c46995b9a9af9ca0..ccf98667c8793ee99cfc7208905cda10e32b57a0 100644 (file)
@@ -14,6 +14,7 @@
  * All of these become an "item" which is our basic unit of
  * information.
  */
+
 use Friendica\App;
 use Friendica\Content\Text\BBCode;
 use Friendica\Core\Addon;
@@ -25,9 +26,9 @@ use Friendica\Database\DBM;
 use Friendica\Model\Contact;
 use Friendica\Model\GContact;
 use Friendica\Model\Item;
-use Friendica\Network\Probe;
 use Friendica\Protocol\Diaspora;
 use Friendica\Protocol\Email;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Emailer;
 
 require_once 'include/enotify.php';
@@ -600,11 +601,11 @@ function item_post(App $a) {
        $datarray['author-link']   = $author['url'];
        $datarray['author-avatar'] = $author['thumb'];
        $datarray['author-id']     = Contact::getIdForURL($datarray['author-link'], 0);
-       $datarray['created']       = datetime_convert();
-       $datarray['edited']        = datetime_convert();
-       $datarray['commented']     = datetime_convert();
-       $datarray['received']      = datetime_convert();
-       $datarray['changed']       = datetime_convert();
+       $datarray['created']       = DateTimeFormat::utcNow();
+       $datarray['edited']        = DateTimeFormat::utcNow();
+       $datarray['commented']     = DateTimeFormat::utcNow();
+       $datarray['received']      = DateTimeFormat::utcNow();
+       $datarray['changed']       = DateTimeFormat::utcNow();
        $datarray['extid']         = $extid;
        $datarray['guid']          = $guid;
        $datarray['uri']           = $uri;
@@ -708,8 +709,8 @@ function item_post(App $a) {
                        'file' => $datarray['file'],
                        'rendered-html' => $datarray['rendered-html'],
                        'rendered-hash' => $datarray['rendered-hash'],
-                       'edited' => datetime_convert(),
-                       'changed' => datetime_convert()];
+                       'edited' => DateTimeFormat::utcNow(),
+                       'changed' => DateTimeFormat::utcNow()];
 
                Item::update($fields, ['id' => $post_id]);
 
index f7129656f4dbbd5eb4bed678812045e99ffacf6b..4920962a7b443d033ea32571f21c26c048654ca0 100644 (file)
@@ -2,9 +2,11 @@
 /**
  * @file mod/localtime.php
  */
+
 use Friendica\App;
 use Friendica\Core\L10n;
 use Friendica\Core\System;
+use Friendica\Util\Temporal;
 
 require_once 'include/datetime.php';
 
@@ -18,7 +20,7 @@ function localtime_post(App $a)
        $bd_format = L10n::t('l F d, Y \@ g:i A') ; // Friday January 18, 2011 @ 8 AM
 
        if ($_POST['timezone']) {
-               $a->data['mod-localtime'] = datetime_convert('UTC', $_POST['timezone'], $t, $bd_format);
+               $a->data['mod-localtime'] = DateTimeFormat::convert($t, $_POST['timezone'], 'UTC', $bd_format);
        }
 }
 
@@ -50,7 +52,7 @@ function localtime_content(App $a)
 
        $o .= '<p>' . L10n::t('Please select your timezone:') . '</p>';
 
-       $o .= select_timezone(($_REQUEST['timezone']) ? $_REQUEST['timezone'] : 'America/Los_Angeles');
+       $o .= Temporal::getTimezoneSelect(($_REQUEST['timezone']) ? $_REQUEST['timezone'] : 'America/Los_Angeles');
 
        $o .= '<input type="submit" name="submit" value="' . L10n::t('Submit') . '" /></form>';
 
index c39a38cca95fe002b7caf7fa03ba49faa6977a37..75d29731be71d7daba16b4c022af40ca00980f5b 100644 (file)
@@ -8,6 +8,7 @@ use Friendica\Core\L10n;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
 use Friendica\Model\User;
+use Friendica\Util\DateTimeFormat;
 
 require_once 'boot.php';
 require_once 'include/datetime.php';
@@ -32,7 +33,7 @@ function lostpass_post(App $a)
 
        $fields = [
                'pwdreset' => $pwdreset_token,
-               'pwdreset_time' => datetime_convert()
+               'pwdreset_time' => DateTimeFormat::utcNow()
        ];
        $result = dba::update('user', $fields, ['uid' => $user['uid']]);
        if ($result) {
@@ -91,7 +92,7 @@ function lostpass_content(App $a)
                }
 
                // Password reset requests expire in 60 minutes
-               if ($user['pwdreset_time'] < datetime_convert('UTC', 'UTC', 'now - 1 hour')) {
+               if ($user['pwdreset_time'] < DateTimeFormat::utc('now - 1 hour')) {
                        $fields = [
                                'pwdreset' => null,
                                'pwdreset_time' => null
index 20d024feb72388bb527c3f1288475245492bcac2..ec5669937370a8d7709cc350869044b6c0276062 100644 (file)
@@ -2,6 +2,7 @@
 /**
  * @file mod/message.php
  */
+
 use Friendica\App;
 use Friendica\Content\Nav;
 use Friendica\Content\Smilies;
@@ -10,6 +11,7 @@ use Friendica\Core\System;
 use Friendica\Database\DBM;
 use Friendica\Model\Contact;
 use Friendica\Model\Mail;
+use Friendica\Util\DateTimeFormat;
 
 require_once 'include/acl_selectors.php';
 require_once 'include/conversation.php';
@@ -395,7 +397,7 @@ function message_content(App $a)
                                'body' => $body_e,
                                'delete' => L10n::t('Delete message'),
                                'to_name' => $to_name_e,
-                               'date' => datetime_convert('UTC', date_default_timezone_get(), $message['created'], 'D, d M Y - g:i A'),
+                               'date' => DateTimeFormat::local($message['created'], 'D, d M Y - g:i A'),
                                'ago' => relative_date($message['created']),
                        ];
 
@@ -496,7 +498,7 @@ function render_messages(array $msg, $t)
                        '$delete' => L10n::t('Delete conversation'),
                        '$body' => $body_e,
                        '$to_name' => $to_name_e,
-                       '$date' => datetime_convert('UTC', date_default_timezone_get(), $rr['mailcreated'], L10n::t('D, d M Y - g:i A')),
+                       '$date' => DateTimeFormat::local($rr['mailcreated'], L10n::t('D, d M Y - g:i A')),
                        '$ago' => relative_date($rr['mailcreated']),
                        '$seen' => $rr['mailseen'],
                        '$count' => L10n::tt('%d message', '%d messages', $rr['count']),
index a1100352cdb0ab4d9ad33663c2d79233af49191e..c2f05fd8e7e22a14a17a4b9b06c306eb28dc4fa8 100644 (file)
@@ -3,14 +3,15 @@
 /**
  * @file mod/network.php
  */
+
 use Friendica\App;
 use Friendica\Content\Feature;
 use Friendica\Content\ForumManager;
 use Friendica\Content\Nav;
 use Friendica\Content\Widget;
 use Friendica\Core\Addon;
-use Friendica\Core\L10n;
 use Friendica\Core\Config;
+use Friendica\Core\L10n;
 use Friendica\Core\PConfig;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
@@ -18,6 +19,7 @@ use Friendica\Model\Contact;
 use Friendica\Model\Group;
 use Friendica\Model\Profile;
 use Friendica\Module\Login;
+use Friendica\Util\DateTimeFormat;
 
 require_once 'include/conversation.php';
 require_once 'include/items.php';
@@ -679,11 +681,11 @@ function networkThreadedView(App $a, $update = 0)
 
        if ($datequery) {
                $sql_extra3 .= protect_sprintf(sprintf(" AND $sql_table.created <= '%s' ",
-                               dbesc(datetime_convert(date_default_timezone_get(), '', $datequery))));
+                               dbesc(DateTimeFormat::convert($datequery, 'UTC', date_default_timezone_get()))));
        }
        if ($datequery2) {
                $sql_extra3 .= protect_sprintf(sprintf(" AND $sql_table.created >= '%s' ",
-                               dbesc(datetime_convert(date_default_timezone_get(), '', $datequery2))));
+                               dbesc(DateTimeFormat::convert($datequery2, 'UTC', date_default_timezone_get()))));
        }
 
        $sql_order = '';
@@ -788,8 +790,8 @@ function networkThreadedView(App $a, $update = 0)
                        $top_limit = current($r)['order_date'];
                        $bottom_limit = end($r)['order_date'];
                } else {
-                       $top_limit = datetime_convert();
-                       $bottom_limit = datetime_convert();
+                       $top_limit = DateTimeFormat::utcNow();
+                       $bottom_limit = DateTimeFormat::utcNow();
                }
 
                // When checking for updates we need to fetch from the newest date to the newest date before
@@ -802,7 +804,7 @@ function networkThreadedView(App $a, $update = 0)
                        $top_limit = $last_date;
                } elseif ($a->pager['page'] == 1) {
                        // Highest possible top limit when we are on the first page
-                       $top_limit = datetime_convert();
+                       $top_limit = DateTimeFormat::utcNow();
                }
 
                $items = dba::p("SELECT `item`.`id` AS `item_id`, `item`.`network` AS `item_network`, `contact`.`uid` AS `contact_uid` FROM `item`
index a9e77c7c39089590f8c00ee179e29d853d4014ac..8b3dbdc759ae4294fda0bbeab81438e99d210cd4 100644 (file)
@@ -2,13 +2,14 @@
 /**
  * @file mod/photos.php
  */
+
 use Friendica\App;
 use Friendica\Content\Feature;
 use Friendica\Content\Nav;
 use Friendica\Core\Addon;
+use Friendica\Core\Config;
 use Friendica\Core\L10n;
 use Friendica\Core\System;
-use Friendica\Core\Config;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
 use Friendica\Model\Contact;
@@ -19,6 +20,8 @@ use Friendica\Model\Profile;
 use Friendica\Network\Probe;
 use Friendica\Object\Image;
 use Friendica\Protocol\DFRN;
+use Friendica\Util\DateTimeFormat;
+use Friendica\Util\Map;
 
 require_once 'include/items.php';
 require_once 'include/acl_selectors.php';
@@ -288,7 +291,7 @@ function photos_post(App $a)
                        if (DBM::is_result($r)) {
                                foreach ($r as $rr) {
                                        q("UPDATE `item` SET `deleted` = 1, `changed` = '%s' WHERE `parent-uri` = '%s' AND `uid` = %d",
-                                               dbesc(datetime_convert()),
+                                               dbesc(DateTimeFormat::utcNow()),
                                                dbesc($rr['parent-uri']),
                                                intval($page_owner_uid)
                                        );
@@ -361,8 +364,8 @@ function photos_post(App $a)
                        );
                        if (DBM::is_result($i)) {
                                q("UPDATE `item` SET `deleted` = 1, `edited` = '%s', `changed` = '%s' WHERE `parent-uri` = '%s' AND `uid` = %d",
-                                       dbesc(datetime_convert()),
-                                       dbesc(datetime_convert()),
+                                       dbesc(DateTimeFormat::utcNow()),
+                                       dbesc(DateTimeFormat::utcNow()),
                                        dbesc($i[0]['uri']),
                                        intval($page_owner_uid)
                                );
@@ -399,7 +402,7 @@ function photos_post(App $a)
                $resource_id = $a->argv[2];
 
                if (!strlen($albname)) {
-                       $albname = datetime_convert('UTC',date_default_timezone_get(),'now', 'Y');
+                       $albname = DateTimeFormat::localNow('Y');
                }
 
                if (x($_POST,'rotate') !== false &&
@@ -646,8 +649,8 @@ function photos_post(App $a)
                        $r = q("UPDATE `item` SET `tag` = '%s', `inform` = '%s', `edited` = '%s', `changed` = '%s' WHERE `id` = %d AND `uid` = %d",
                                dbesc($newtag),
                                dbesc($newinform),
-                               dbesc(datetime_convert()),
-                               dbesc(datetime_convert()),
+                               dbesc(DateTimeFormat::utcNow()),
+                               dbesc(DateTimeFormat::utcNow()),
                                intval($item_id),
                                intval($page_owner_uid)
                        );
@@ -735,7 +738,7 @@ function photos_post(App $a)
                if (strlen($newalbum)) {
                        $album = $newalbum;
                } else {
-                       $album = datetime_convert('UTC',date_default_timezone_get(),'now', 'Y');
+                       $album = DateTimeFormat::localNow('Y');
                }
        }
 
@@ -1358,7 +1361,7 @@ function photos_content(App $a)
                $photo = [
                        'href' => 'photo/' . $hires['resource-id'] . '-' . $hires['scale'] . '.' . $phototypes[$hires['type']],
                        'title'=> L10n::t('View Full Size'),
-                       'src'  => 'photo/' . $lores['resource-id'] . '-' . $lores['scale'] . '.' . $phototypes[$lores['type']] . '?f=&_u=' . datetime_convert('','','','ymdhis'),
+                       'src'  => 'photo/' . $lores['resource-id'] . '-' . $lores['scale'] . '.' . $phototypes[$lores['type']] . '?f=&_u=' . DateTimeFormat::utcNow('ymdhis'),
                        'height' => $hires['height'],
                        'width' => $hires['width'],
                        'album' => $hires['album'],
index a685a924a759b353c73169590d815fcd12b7ab40..3249624fbeb3c87388f3b64a02df584cbcf83266 100644 (file)
@@ -2,17 +2,19 @@
 /**
  * @file include/ping.php
  */
+
 use Friendica\App;
 use Friendica\Content\Feature;
 use Friendica\Content\ForumManager;
 use Friendica\Core\Addon;
 use Friendica\Core\Cache;
 use Friendica\Core\L10n;
-use Friendica\Core\System;
 use Friendica\Core\PConfig;
+use Friendica\Core\System;
 use Friendica\Database\DBM;
 use Friendica\Model\Contact;
 use Friendica\Model\Group;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\XML;
 
 require_once 'include/datetime.php';
@@ -223,8 +225,8 @@ function ping_init(App $a)
                                WHERE `event`.`uid` = %d AND `start` < '%s' AND `finish` > '%s' and `ignore` = 0
                                ORDER BY `start` ASC ",
                                intval(local_user()),
-                               dbesc(datetime_convert('UTC', 'UTC', 'now + 7 days')),
-                               dbesc(datetime_convert('UTC', 'UTC', 'now'))
+                               dbesc(DateTimeFormat::utc('now + 7 days')),
+                               dbesc(DateTimeFormat::utcNow())
                        );
                        if (DBM::is_result($ev)) {
                                Cache::set($cachekey, $ev, CACHE_HOUR);
@@ -235,7 +237,7 @@ function ping_init(App $a)
                        $all_events = count($ev);
 
                        if ($all_events) {
-                               $str_now = datetime_convert('UTC', $a->timezone, 'now', 'Y-m-d');
+                               $str_now = DateTimeFormat::timezoneNow($a->timezone, 'Y-m-d');
                                foreach ($ev as $x) {
                                        $bd = false;
                                        if ($x['type'] === 'birthday') {
@@ -244,7 +246,7 @@ function ping_init(App $a)
                                        } else {
                                                $events ++;
                                        }
-                                       if (datetime_convert('UTC', ((intval($x['adjust'])) ? $a->timezone : 'UTC'), $x['start'], 'Y-m-d') === $str_now) {
+                                       if (DateTimeFormat::convert($x['start'], ((intval($x['adjust'])) ? $a->timezone : 'UTC'), 'UTC', 'Y-m-d') === $str_now) {
                                                $all_events_today ++;
                                                if ($bd) {
                                                        $birthdays_today ++;
@@ -360,7 +362,7 @@ function ping_init(App $a)
                                        $notif['photo'] = proxy_url($notif['photo'], false, PROXY_SIZE_MICRO);
                                }
 
-                               $local_time = datetime_convert('UTC', date_default_timezone_get(), $notif['date']);
+                               $local_time = DateTimeFormat::local($notif['date']);
 
                                $notifications[] = [
                                        'id'        => $notif['id'],
index c27cd7c49c5ccfbd2bbb1dcc6eae0f2706be91b9..639ab8469c0f085eb949f6e960e8b71805eb9103 100644 (file)
@@ -3,12 +3,14 @@
 // See here for a documentation for portable contacts:
 // https://web.archive.org/web/20160405005550/http://portablecontacts.net/draft-spec.html
 
+
 use Friendica\App;
 use Friendica\Core\Cache;
 use Friendica\Core\Config;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
 use Friendica\Protocol\PortableContact;
+use Friendica\Util\DateTimeFormat;
 
 function poco_init(App $a) {
        $system_mode = false;
@@ -43,7 +45,7 @@ function poco_init(App $a) {
        if ($a->argc > 1 && $a->argv[1] === '@global') {
                // List of all profiles that this server recently had data from
                $global = true;
-               $update_limit = date("Y-m-d H:i:s", time() - 30 * 86400);
+               $update_limit = date(DateTimeFormat::MYSQL, time() - 30 * 86400);
        }
        if ($a->argc > 2 && $a->argv[2] === '@me') {
                $justme = true;
@@ -80,7 +82,7 @@ function poco_init(App $a) {
                $sql_extra = sprintf(" AND `contact`.`id` = %d ", intval($cid));
        }
        if (x($_GET, 'updatedSince')) {
-               $update_limit = date("Y-m-d H:i:s", strtotime($_GET['updatedSince']));
+               $update_limit = date(DateTimeFormat::MYSQL, strtotime($_GET['updatedSince']));
        }
        if ($global) {
                $contacts = q("SELECT count(*) AS `total` FROM `gcontact` WHERE `updated` >= '%s' AND `updated` >= `last_failure` AND NOT `hide` AND `network` IN ('%s', '%s', '%s')",
index 5c769bdfad3bb68750a0a9674d588f9a233e9385..a2fff27e0712607588c95b6fb293e094c34903d5 100644 (file)
@@ -2,9 +2,10 @@
 /**
  * @file mod/profile.php
  */
+
 use Friendica\App;
-use Friendica\Content\Widget;
 use Friendica\Content\Nav;
+use Friendica\Content\Widget;
 use Friendica\Core\Addon;
 use Friendica\Core\Config;
 use Friendica\Core\L10n;
@@ -15,6 +16,7 @@ use Friendica\Model\Group;
 use Friendica\Model\Profile;
 use Friendica\Module\Login;
 use Friendica\Protocol\DFRN;
+use Friendica\Util\DateTimeFormat;
 
 function profile_init(App $a)
 {
@@ -234,7 +236,7 @@ function profile_content(App $a, $update = 0)
                if ($is_owner || !$last_updated) {
                        $sql_extra4 = " AND `item`.`unseen`";
                } else {
-                       $gmupdate = gmdate("Y-m-d H:i:s", $last_updated);
+                       $gmupdate = gmdate(DateTimeFormat::MYSQL, $last_updated);
                        $sql_extra4 = " AND `item`.`received` > '" . $gmupdate . "'";
                }
 
@@ -270,10 +272,10 @@ function profile_content(App $a, $update = 0)
                }
 
                if ($datequery) {
-                       $sql_extra2 .= protect_sprintf(sprintf(" AND `thread`.`created` <= '%s' ", dbesc(datetime_convert(date_default_timezone_get(), '', $datequery))));
+                       $sql_extra2 .= protect_sprintf(sprintf(" AND `thread`.`created` <= '%s' ", dbesc(DateTimeFormat::convert($datequery, 'UTC', date_default_timezone_get()))));
                }
                if ($datequery2) {
-                       $sql_extra2 .= protect_sprintf(sprintf(" AND `thread`.`created` >= '%s' ", dbesc(datetime_convert(date_default_timezone_get(), '', $datequery2))));
+                       $sql_extra2 .= protect_sprintf(sprintf(" AND `thread`.`created` >= '%s' ", dbesc(DateTimeFormat::convert($datequery2, 'UTC', date_default_timezone_get()))));
                }
 
                // Belongs the profile page to a forum?
index 8b4d8076db4157b9943be60f8f51c9fa9f4f7d1c..370e19ce5e840d5ce55637c1379c9386cc61a219 100644 (file)
@@ -2,6 +2,7 @@
 /**
  * @file mod/profile_photo.php
  */
+
 use Friendica\App;
 use Friendica\Core\Config;
 use Friendica\Core\L10n;
@@ -11,6 +12,7 @@ use Friendica\Database\DBM;
 use Friendica\Model\Photo;
 use Friendica\Model\Profile;
 use Friendica\Object\Image;
+use Friendica\Util\DateTimeFormat;
 
 function profile_photo_init(App $a)
 {
@@ -128,7 +130,7 @@ function profile_photo_post(App $a) {
                                // so that browsers will do a cache update unconditionally
 
                                $r = q("UPDATE `contact` SET `avatar-date` = '%s' WHERE `self` = 1 AND `uid` = %d",
-                                       dbesc(datetime_convert()),
+                                       dbesc(DateTimeFormat::utcNow()),
                                        intval(local_user())
                                );
 
@@ -228,7 +230,7 @@ function profile_photo_content(App $a) {
                                );
 
                        $r = q("UPDATE `contact` SET `avatar-date` = '%s' WHERE `self` = 1 AND `uid` = %d",
-                               dbesc(datetime_convert()),
+                               dbesc(DateTimeFormat::utcNow()),
                                intval(local_user())
                        );
 
index 055bbf99eb8dfef7f8dc3b607acfe7f7c053c55e..bde24764ff64d54f5eb9796d0a1298563c3d662c 100644 (file)
@@ -2,6 +2,7 @@
 /**
  * @file mod/profiles.php
  */
+
 use Friendica\App;
 use Friendica\Content\ContactSelector;
 use Friendica\Content\Feature;
@@ -17,6 +18,7 @@ use Friendica\Model\GContact;
 use Friendica\Model\Profile;
 use Friendica\Model\Item;
 use Friendica\Network\Probe;
+use Friendica\Util\DateTimeFormat;
 
 function profiles_init(App $a) {
 
@@ -216,10 +218,11 @@ function profiles_post(App $a) {
                                $ignore_year = true;
                                $dob = substr($dob, 5);
                        }
-                       $dob = datetime_convert('UTC', 'UTC', (($ignore_year) ? '1900-' . $dob : $dob), (($ignore_year) ? 'm-d' : 'Y-m-d'));
 
                        if ($ignore_year) {
-                               $dob = '0000-' . $dob;
+                               $dob = '0000-' . DateTimeFormat::utc('1900-' . $dob, 'm-d');
+                       } else {
+                               $dob = DateTimeFormat::utc($dob, 'Y-m-d');
                        }
                }
 
@@ -250,7 +253,7 @@ function profiles_post(App $a) {
                if (! strlen($howlong)) {
                        $howlong = NULL_DATE;
                } else {
-                       $howlong = datetime_convert(date_default_timezone_get(), 'UTC', $howlong);
+                       $howlong = DateTimeFormat::convert($howlong, 'UTC', date_default_timezone_get());
                }
                // linkify the relationship target if applicable
 
@@ -485,7 +488,7 @@ function profiles_post(App $a) {
                if ($namechanged && $is_default) {
                        $r = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s' WHERE `self` = 1 AND `uid` = %d",
                                dbesc($name),
-                               dbesc(datetime_convert()),
+                               dbesc(DateTimeFormat::utcNow()),
                                intval(local_user())
                        );
                        $r = q("UPDATE `user` set `username` = '%s' where `uid` = %d",
@@ -722,7 +725,7 @@ function profiles_content(App $a) {
                        '$gender' => ContactSelector::gender($r[0]['gender']),
                        '$marital' => ContactSelector::maritalStatus($r[0]['marital']),
                        '$with' => ['with', L10n::t("Who: \x28if applicable\x29"), strip_tags($r[0]['with']), L10n::t('Examples: cathy123, Cathy Williams, cathy@example.com')],
-                       '$howlong' => ['howlong', L10n::t('Since [date]:'), ($r[0]['howlong'] <= NULL_DATE ? '' : datetime_convert('UTC',date_default_timezone_get(),$r[0]['howlong']))],
+                       '$howlong' => ['howlong', L10n::t('Since [date]:'), ($r[0]['howlong'] <= NULL_DATE ? '' : DateTimeFormat::local($r[0]['howlong']))],
                        '$sexual' => ContactSelector::sexualPreference($r[0]['sexual']),
                        '$about' => ['about', L10n::t('Tell us about yourself...'), $r[0]['about']],
                        '$xmpp' => ['xmpp', L10n::t("XMPP \x28Jabber\x29 address:"), $r[0]['xmpp'], L10n::t("The XMPP address will be propagated to your contacts so that they can follow you.")],
index 7efc0ffbaa67ed7d12e049fd1aecf9e091a4b7ee..0b84233e5f356088916aca39b59b0762438af06c 100644 (file)
@@ -10,6 +10,7 @@ use Friendica\Core\System;
 use Friendica\Database\DBM;
 use Friendica\Model\Photo;
 use Friendica\Object\Image;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
 
 define('PROXY_DEFAULT_TIME', 86400); // 1 Day
@@ -187,7 +188,7 @@ function proxy_init(App $a) {
                                die();
                        }
 
-                       $fields = ['uid' => 0, 'contact-id' => 0, 'guid' => get_guid(), 'resource-id' => $urlhash, 'created' => datetime_convert(), 'edited' => datetime_convert(),
+                       $fields = ['uid' => 0, 'contact-id' => 0, 'guid' => get_guid(), 'resource-id' => $urlhash, 'created' => DateTimeFormat::utcNow(), 'edited' => DateTimeFormat::utcNow(),
                                'filename' => basename($_REQUEST['url']), 'type' => '', 'album' => '', 'height' => imagesy($image), 'width' => imagesx($image),
                                'datasize' => 0, 'data' => $img_str, 'scale' => 100, 'profile' => 0,
                                'allow_cid' => '', 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '', 'desc' => $mime];
index ac85657ddfea64811b5cce6ed8f2a947112b8324..051ae2e84264d74e6678869f02f0620aaef26902 100644 (file)
@@ -4,6 +4,7 @@ use Friendica\App;
 use Friendica\Core\Config;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
 
 function post_var($name) {
@@ -138,7 +139,7 @@ function pubsubhubbub_init(App $a) {
                  dbesc($hub_callback));
 
                if ($subscribe) {
-                       $last_update = datetime_convert('UTC','UTC','now','Y-m-d H:i:s');
+                       $last_update = DateTimeFormat::utcNow();
                        $push_flag = 0;
 
                        // if we are just updating an old subscription, keep the
index 6466458a7c3837c32e8e33ced520496cd44bdd9e..bf87c9259fba559efd358dfae169508012c8a303 100644 (file)
@@ -2,6 +2,7 @@
 /**
  * @file mod/register.php
  */
+
 use Friendica\App;
 use Friendica\Core\Addon;
 use Friendica\Core\Config;
@@ -10,6 +11,7 @@ use Friendica\Core\PConfig;
 use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Model\User;
+use Friendica\Util\DateTimeFormat;
 
 require_once 'include/enotify.php';
 require_once 'include/bbcode.php';
@@ -116,7 +118,7 @@ function register_post(App $a)
                $hash = random_string();
                $r = q("INSERT INTO `register` ( `hash`, `created`, `uid`, `password`, `language`, `note` ) VALUES ( '%s', '%s', %d, '%s', '%s', '%s' ) ",
                        dbesc($hash),
-                       dbesc(datetime_convert()),
+                       dbesc(DateTimeFormat::utcNow()),
                        intval($user['uid']),
                        dbesc($result['password']),
                        dbesc($lang),
index cb052826f40428159c032be7f9bfcc8b2b31044e..9aa2c0b5b1c452fd701e8b7d4b3cf4e362a1bc38 100644 (file)
@@ -17,7 +17,9 @@ use Friendica\Model\GContact;
 use Friendica\Model\Group;
 use Friendica\Model\User;
 use Friendica\Protocol\Email;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
+use Friendica\Util\Temporal;
 
 function get_theme_config_file($theme)
 {
@@ -630,7 +632,7 @@ function settings_post(App $a)
        if ($name_change) {
                q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s' WHERE `uid` = %d AND `self`",
                        dbesc($username),
-                       dbesc(datetime_convert()),
+                       dbesc(DateTimeFormat::utcNow()),
                        intval(local_user())
                );
        }
@@ -1210,7 +1212,7 @@ function settings_content(App $a)
                '$h_basic'      => L10n::t('Basic Settings'),
                '$username' => ['username',  L10n::t('Full Name:'), $username, ''],
                '$email'        => ['email', L10n::t('Email Address:'), $email, '', '', '', 'email'],
-               '$timezone' => ['timezone_select' , L10n::t('Your Timezone:'), select_timezone($timezone), ''],
+               '$timezone' => ['timezone_select' , L10n::t('Your Timezone:'), Temporal::getTimezoneSelect($timezone), ''],
                '$language' => ['language', L10n::t('Your Language:'), $language, L10n::t('Set the language we use to show you friendica interface and to send you emails'), $lang_choices],
                '$defloc'       => ['defloc', L10n::t('Default Post Location:'), $defloc, ''],
                '$allowloc' => ['allow_location', L10n::t('Use Browser Location:'), ($a->user['allow_location'] == 1), ''],
index ac7d0f34e51f107c4750f0a4b448d151e53335f9..69adf1091f085d87a0ca9edb8159c0dfff68d845 100644 (file)
@@ -2,6 +2,7 @@
 /**
  * @file mod/videos.php
  */
+
 use Friendica\App;
 use Friendica\Content\Nav;
 use Friendica\Core\Config;
@@ -13,6 +14,7 @@ use Friendica\Model\Contact;
 use Friendica\Model\Group;
 use Friendica\Model\Profile;
 use Friendica\Protocol\DFRN;
+use Friendica\Util\DateTimeFormat;
 
 require_once 'include/items.php';
 require_once 'include/acl_selectors.php';
@@ -168,8 +170,8 @@ function videos_post(App $a) {
                        //echo "<pre>"; var_dump($i); killme();
                        if (DBM::is_result($i)) {
                                q("UPDATE `item` SET `deleted` = 1, `edited` = '%s', `changed` = '%s' WHERE `parent-uri` = '%s' AND `uid` = %d",
-                                       dbesc(datetime_convert()),
-                                       dbesc(datetime_convert()),
+                                       dbesc(DateTimeFormat::utcNow()),
+                                       dbesc(DateTimeFormat::utcNow()),
                                        dbesc($i[0]['uri']),
                                        intval(local_user())
                                );
index 57d7b2e95279b22d53b3be4d8f3508e9f4d69145..30bc9641f7893b89fcbf21a65d68ce1257f64de4 100644 (file)
@@ -2,10 +2,12 @@
 /**
  * @file mod/wall_attach.php
  */
+
 use Friendica\App;
 use Friendica\Core\Config;
 use Friendica\Core\L10n;
 use Friendica\Database\DBM;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Mimetype;
 
 require_once 'include/datetime.php';
@@ -122,7 +124,7 @@ function wall_attach_post(App $a) {
        $filedata = @file_get_contents($src);
        $mimetype = Mimetype::getContentType($filename);
        $hash = get_guid(64);
-       $created = datetime_convert();
+       $created = DateTimeFormat::utcNow();
 
        $fields = ['uid' => $page_owner_uid, 'hash' => $hash, 'filename' => $filename, 'filetype' => $mimetype,
                'filesize' => $filesize, 'data' => $filedata, 'created' => $created, 'edited' => $created,
index 170ee7ba265eb13a40d1e49d1f7cf22abb2c1ea0..b09fd2249535a2914548bf3ef99020b279335aa8 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * @file src/Content/OEmbed.php
  */
@@ -6,16 +7,18 @@ namespace Friendica\Content;
 
 use Friendica\Core\Addon;
 use Friendica\Core\Cache;
+use Friendica\Core\Config;
 use Friendica\Core\L10n;
 use Friendica\Core\System;
-use Friendica\Core\Config;
 use Friendica\Database\DBM;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
 use Friendica\Util\ParseUrl;
 use dba;
 use DOMDocument;
-use DOMXPath;
 use DOMNode;
+use DOMText;
+use DOMXPath;
 use Exception;
 
 require_once 'include/dba.php';
@@ -110,7 +113,7 @@ class OEmbed
                                                'url' => normalise_link($embedurl),
                                                'maxwidth' => $a->videowidth,
                                                'content' => $txt,
-                                               'created' => datetime_convert()
+                                               'created' => DateTimeFormat::utcNow()
                                        ], true);
                                }
 
index 05ccdd4feca7e07febc8245ac9ae2296906832d2..36db52b0e054170a73480ddf31825e2db53db680 100644 (file)
@@ -5,9 +5,10 @@
 namespace Friendica\Core;
 
 use Friendica\Core\Config;
-use Friendica\Core\PConfig;
 use Friendica\Database\DBM;
+use Friendica\Util\DateTimeFormat;
 use dba;
+use Memcache;
 
 require_once 'include/dba.php';
 
@@ -34,7 +35,7 @@ class Cache
                $memcache_host = Config::get('system', 'memcache_host', '127.0.0.1');
                $memcache_port = Config::get('system', 'memcache_port', 11211);
 
-               $memcache = new \Memcache;
+               $memcache = new Memcache;
 
                if (!$memcache->connect($memcache_host, $memcache_port)) {
                        return false;
@@ -146,7 +147,7 @@ class Cache
                        $memcache->set(get_app()->get_hostname().":".$key, serialize($value), MEMCACHE_COMPRESSED, self::duration($duration));
                        return;
                }
-               $fields = ['v' => serialize($value), 'expire_mode' => $duration, 'updated' => datetime_convert()];
+               $fields = ['v' => serialize($value), 'expire_mode' => $duration, 'updated' => DateTimeFormat::utcNow()];
                $condition = ['k' => $key];
                dba::update('cache', $fields, $condition, true);
        }
@@ -164,21 +165,21 @@ class Cache
                if (Config::get("system", "cache_cleared_day") < time() - self::duration(CACHE_DAY)) {
                        if ($max_level == CACHE_MONTH) {
                                $condition = ["`updated` < ? AND `expire_mode` = ?",
-                                               datetime_convert('UTC', 'UTC', "now - 30 days"),
+                                               DateTimeFormat::utc("now - 30 days"),
                                                CACHE_MONTH];
                                dba::delete('cache', $condition);
                        }
 
                        if ($max_level <= CACHE_WEEK) {
                                $condition = ["`updated` < ? AND `expire_mode` = ?",
-                                               datetime_convert('UTC', 'UTC', "now - 7 days"),
+                                               DateTimeFormat::utc("now - 7 days"),
                                                CACHE_WEEK];
                                dba::delete('cache', $condition);
                        }
 
                        if ($max_level <= CACHE_DAY) {
                                $condition = ["`updated` < ? AND `expire_mode` = ?",
-                                               datetime_convert('UTC', 'UTC', "now - 1 days"),
+                                               DateTimeFormat::utc("now - 1 days"),
                                                CACHE_DAY];
                                dba::delete('cache', $condition);
                        }
@@ -187,7 +188,7 @@ class Cache
 
                if (($max_level <= CACHE_HOUR) && (Config::get("system", "cache_cleared_hour")) < time() - self::duration(CACHE_HOUR)) {
                        $condition = ["`updated` < ? AND `expire_mode` = ?",
-                                       datetime_convert('UTC', 'UTC', "now - 1 hours"),
+                                       DateTimeFormat::utc("now - 1 hours"),
                                        CACHE_HOUR];
                        dba::delete('cache', $condition);
 
@@ -196,7 +197,7 @@ class Cache
 
                if (($max_level <= CACHE_HALF_HOUR) && (Config::get("system", "cache_cleared_half_hour")) < time() - self::duration(CACHE_HALF_HOUR)) {
                        $condition = ["`updated` < ? AND `expire_mode` = ?",
-                                       datetime_convert('UTC', 'UTC', "now - 30 minutes"),
+                                       DateTimeFormat::utc("now - 30 minutes"),
                                        CACHE_HALF_HOUR];
                        dba::delete('cache', $condition);
 
@@ -205,7 +206,7 @@ class Cache
 
                if (($max_level <= CACHE_QUARTER_HOUR) && (Config::get("system", "cache_cleared_quarter_hour")) < time() - self::duration(CACHE_QUARTER_HOUR)) {
                        $condition = ["`updated` < ? AND `expire_mode` = ?",
-                                       datetime_convert('UTC', 'UTC', "now - 15 minutes"),
+                                       DateTimeFormat::utc("now - 15 minutes"),
                                        CACHE_QUARTER_HOUR];
                        dba::delete('cache', $condition);
 
@@ -214,7 +215,7 @@ class Cache
 
                if (($max_level <= CACHE_FIVE_MINUTES) && (Config::get("system", "cache_cleared_five_minute")) < time() - self::duration(CACHE_FIVE_MINUTES)) {
                        $condition = ["`updated` < ? AND `expire_mode` = ?",
-                                       datetime_convert('UTC', 'UTC', "now - 5 minutes"),
+                                       DateTimeFormat::utc("now - 5 minutes"),
                                        CACHE_FIVE_MINUTES];
                        dba::delete('cache', $condition);
 
@@ -223,7 +224,7 @@ class Cache
 
                if (($max_level <= CACHE_MINUTE) && (Config::get("system", "cache_cleared_minute")) < time() - self::duration(CACHE_MINUTE)) {
                        $condition = ["`updated` < ? AND `expire_mode` = ?",
-                                       datetime_convert('UTC', 'UTC', "now - 1 minutes"),
+                                       DateTimeFormat::utc("now - 1 minutes"),
                                        CACHE_MINUTE];
                        dba::delete('cache', $condition);
 
index 7c2760a85be62f85ad98bc4ee978288c6d6601dd..356ed4a472e57aad7145077ecf23f3f01468199d 100644 (file)
@@ -13,6 +13,7 @@ use Friendica\Core\System;
 use Friendica\Database\DBM;
 use Friendica\Model\Contact;
 use Friendica\Model\Profile;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\XML;
 
 require_once 'include/dba.php';
@@ -42,7 +43,7 @@ class NotificationsManager extends BaseObject
        {
                $rets = [];
                foreach ($notes as $n) {
-                       $local_time = datetime_convert('UTC', date_default_timezone_get(), $n['date']);
+                       $local_time = DateTimeFormat::local($n['date']);
                        $n['timestamp'] = strtotime($local_time);
                        $n['date_rel'] = relative_date($n['date']);
                        $n['msg_html'] = bbcode($n['msg'], false, false, false, false);
@@ -243,7 +244,7 @@ class NotificationsManager extends BaseObject
                                                $default_item_image = proxy_url($it['photo'], false, PROXY_SIZE_MICRO);
                                                $default_item_url = $it['url'];
                                                $default_item_text = strip_tags(bbcode($it['msg']));
-                                               $default_item_when = datetime_convert('UTC', date_default_timezone_get(), $it['date'], 'r');
+                                               $default_item_when = DateTimeFormat::local($it['date'], 'r');
                                                $default_item_ago = relative_date($it['date']);
                                                break;
 
@@ -253,7 +254,7 @@ class NotificationsManager extends BaseObject
                                                $default_item_image = proxy_url($it['author-avatar'], false, PROXY_SIZE_MICRO);
                                                $default_item_url = $it['author-link'];
                                                $default_item_text = L10n::t("%s commented on %s's post", $it['author-name'], $it['pname']);
-                                               $default_item_when = datetime_convert('UTC', date_default_timezone_get(), $it['created'], 'r');
+                                               $default_item_when = DateTimeFormat::local($it['created'], 'r');
                                                $default_item_ago = relative_date($it['created']);
                                                break;
 
@@ -265,7 +266,7 @@ class NotificationsManager extends BaseObject
                                                $default_item_text = (($it['id'] == $it['parent'])
                                                                        ? L10n::t("%s created a new post", $it['author-name'])
                                                                        : L10n::t("%s commented on %s's post", $it['author-name'], $it['pname']));
-                                               $default_item_when = datetime_convert('UTC', date_default_timezone_get(), $it['created'], 'r');
+                                               $default_item_when = DateTimeFormat::local($it['created'], 'r');
                                                $default_item_ago = relative_date($it['created']);
                                }
 
index ee313bef01cc68ca0c60bdb7a466920fc53e8005..fd5a0bf4c3a3db97dae2c1aff4926df552b355f7 100644 (file)
@@ -9,6 +9,7 @@ use Friendica\Core\Config;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
 use Friendica\Model\Process;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Lock;
 use Friendica\Util\Network;
 use dba;
@@ -233,7 +234,7 @@ class Worker
 
                        if ($age > 1) {
                                $stamp = (float)microtime(true);
-                               dba::update('workerqueue', ['executed' => datetime_convert()], ['pid' => $mypid, 'done' => false]);
+                               dba::update('workerqueue', ['executed' => DateTimeFormat::utcNow()], ['pid' => $mypid, 'done' => false]);
                                self::$db_duration += (microtime(true) - $stamp);
                        }
 
@@ -243,7 +244,7 @@ class Worker
 
                        $stamp = (float)microtime(true);
                        if (dba::update('workerqueue', ['done' => true], ['id' => $queue["id"]])) {
-                               Config::set('system', 'last_poller_execution', datetime_convert());
+                               Config::set('system', 'last_poller_execution', DateTimeFormat::utcNow());
                        }
                        self::$db_duration = (microtime(true) - $stamp);
 
@@ -276,7 +277,7 @@ class Worker
 
                        if ($age > 1) {
                                $stamp = (float)microtime(true);
-                               dba::update('workerqueue', ['executed' => datetime_convert()], ['pid' => $mypid, 'done' => false]);
+                               dba::update('workerqueue', ['executed' => DateTimeFormat::utcNow()], ['pid' => $mypid, 'done' => false]);
                                self::$db_duration += (microtime(true) - $stamp);
                        }
 
@@ -284,7 +285,7 @@ class Worker
 
                        $stamp = (float)microtime(true);
                        if (dba::update('workerqueue', ['done' => true], ['id' => $queue["id"]])) {
-                               Config::set('system', 'last_poller_execution', datetime_convert());
+                               Config::set('system', 'last_poller_execution', DateTimeFormat::utcNow());
                        }
                        self::$db_duration = (microtime(true) - $stamp);
                } else {
@@ -572,7 +573,7 @@ class Worker
                                        }
                                        dba::update(
                                                'workerqueue',
-                                               ['executed' => NULL_DATE, 'created' => datetime_convert(), 'priority' => $new_priority, 'pid' => 0],
+                                               ['executed' => NULL_DATE, 'created' => DateTimeFormat::utcNow(), 'priority' => $new_priority, 'pid' => 0],
                                                ['id' => $entry["id"]]
                                        );
                                } else {
@@ -823,7 +824,7 @@ class Worker
                if ($found) {
                        $condition = "`id` IN (".substr(str_repeat("?, ", count($ids)), 0, -2).") AND `pid` = 0 AND NOT `done`";
                        array_unshift($ids, $condition);
-                       dba::update('workerqueue', ['executed' => datetime_convert(), 'pid' => $mypid], $ids);
+                       dba::update('workerqueue', ['executed' => DateTimeFormat::utcNow(), 'pid' => $mypid], $ids);
                }
 
                return $found;
@@ -951,7 +952,7 @@ class Worker
 
                /// @todo We should clean up the corresponding workerqueue entries as well
                $condition = ["`created` < ? AND `command` = 'worker.php'",
-                               datetime_convert('UTC', 'UTC', "now - ".$timeout." minutes")];
+                               DateTimeFormat::utc("now - ".$timeout." minutes")];
                dba::delete('process', $condition);
        }
 
@@ -1038,7 +1039,7 @@ class Worker
 
                $priority = PRIORITY_MEDIUM;
                $dont_fork = Config::get("system", "worker_dont_fork");
-               $created = datetime_convert();
+               $created = DateTimeFormat::utcNow();
 
                if (is_int($run_parameter)) {
                        $priority = $run_parameter;
index 8a57d04a60080f28cd0cf02e86f60759b48fb12a..6f14c12b8c51af9d878597f51a0e3d4228926851 100644 (file)
@@ -5,6 +5,7 @@
 namespace Friendica\Database;
 
 use dba;
+use Friendica\Util\DateTimeFormat;
 
 require_once 'include/dba.php';
 
@@ -126,6 +127,6 @@ class DBM
                        $timestamp = -62135596800;
                }
 
-               return date('Y-m-d H:i:s', (int)$timestamp);
+               return date(DateTimeFormat::MYSQL, (int)$timestamp);
        }
 }
index 3ec9f5ab48929b88cb77c5bcdf2dbf1274873cb9..e57bcd99d42a02ede71350f2bad9cff6734e38f9 100644 (file)
@@ -12,14 +12,15 @@ use Friendica\Core\PConfig;
 use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
-use Friendica\Network\Probe;
 use Friendica\Model\Photo;
 use Friendica\Model\Profile;
-use Friendica\Protocol\Diaspora;
+use Friendica\Network\Probe;
 use Friendica\Protocol\DFRN;
+use Friendica\Protocol\Diaspora;
 use Friendica\Protocol\OStatus;
 use Friendica\Protocol\PortableContact;
 use Friendica\Protocol\Salmon;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
 use dba;
 
@@ -111,7 +112,7 @@ class Contact extends BaseObject
 
                $return = dba::insert('contact', [
                        'uid'         => $user['uid'],
-                       'created'     => datetime_convert(),
+                       'created'     => DateTimeFormat::utcNow(),
                        'self'        => 1,
                        'name'        => $user['username'],
                        'nick'        => $user['nickname'],
@@ -128,9 +129,9 @@ class Contact extends BaseObject
                        'poll'        => System::baseUrl() . '/dfrn_poll/'    . $user['nickname'],
                        'confirm'     => System::baseUrl() . '/dfrn_confirm/' . $user['nickname'],
                        'poco'        => System::baseUrl() . '/poco/'         . $user['nickname'],
-                       'name-date'   => datetime_convert(),
-                       'uri-date'    => datetime_convert(),
-                       'avatar-date' => datetime_convert(),
+                       'name-date'   => DateTimeFormat::utcNow(),
+                       'uri-date'    => DateTimeFormat::utcNow(),
+                       'avatar-date' => DateTimeFormat::utcNow(),
                        'closeness'   => 0
                ]);
 
@@ -209,10 +210,10 @@ class Contact extends BaseObject
                }
 
                if ($contact['term-date'] <= NULL_DATE) {
-                       dba::update('contact', ['term-date' => datetime_convert()], ['id' => $contact['id']]);
+                       dba::update('contact', ['term-date' => DateTimeFormat::utcNow()], ['id' => $contact['id']]);
 
                        if ($contact['url'] != '') {
-                               dba::update('contact', ['term-date' => datetime_convert()], ['`nurl` = ? AND `term-date` <= ? AND NOT `self`', normalise_link($contact['url']), NULL_DATE]);
+                               dba::update('contact', ['term-date' => DateTimeFormat::utcNow()], ['`nurl` = ? AND `term-date` <= ? AND NOT `self`', normalise_link($contact['url']), NULL_DATE]);
                        }
                } else {
                        /* @todo
@@ -223,7 +224,7 @@ class Contact extends BaseObject
 
                        /// @todo Check for contact vitality via probing
                        $expiry = $contact['term-date'] . ' + 32 days ';
-                       if (datetime_convert() > datetime_convert('UTC', 'UTC', $expiry)) {
+                       if (DateTimeFormat::utcNow() > DateTimeFormat::utc($expiry)) {
                                /* Relationship is really truly dead. archive them rather than
                                 * delete, though if the owner tries to unarchive them we'll start
                                 * the whole process over again.
@@ -687,7 +688,7 @@ class Contact extends BaseObject
                        $contact_id = $contact["id"];
 
                        // Update the contact every 7 days
-                       $update_contact = ($contact['avatar-date'] < datetime_convert('', '', 'now -7 days'));
+                       $update_contact = ($contact['avatar-date'] < DateTimeFormat::utc('now -7 days'));
 
                        // We force the update if the avatar is empty
                        if (!x($contact, 'avatar')) {
@@ -727,7 +728,7 @@ class Contact extends BaseObject
                if (!$contact_id) {
                        dba::insert('contact', [
                                'uid'       => $uid,
-                               'created'   => datetime_convert(),
+                               'created'   => DateTimeFormat::utcNow(),
                                'url'       => $data["url"],
                                'nurl'      => normalise_link($data["url"]),
                                'addr'      => $data["addr"],
@@ -748,9 +749,9 @@ class Contact extends BaseObject
                                'request'   => $data["request"],
                                'confirm'   => $data["confirm"],
                                'poco'      => $data["poco"],
-                               'name-date' => datetime_convert(),
-                               'uri-date'  => datetime_convert(),
-                               'avatar-date' => datetime_convert(),
+                               'name-date' => DateTimeFormat::utcNow(),
+                               'uri-date'  => DateTimeFormat::utcNow(),
+                               'avatar-date' => DateTimeFormat::utcNow(),
                                'writable'  => 1,
                                'blocked'   => 0,
                                'readonly'  => 0,
@@ -822,13 +823,13 @@ class Contact extends BaseObject
                }
 
                if (($data["addr"] != $contact["addr"]) || ($data["alias"] != $contact["alias"])) {
-                       $updated['uri-date'] = datetime_convert();
+                       $updated['uri-date'] = DateTimeFormat::utcNow();
                }
                if (($data["name"] != $contact["name"]) || ($data["nick"] != $contact["nick"])) {
-                       $updated['name-date'] = datetime_convert();
+                       $updated['name-date'] = DateTimeFormat::utcNow();
                }
 
-               $updated['avatar-date'] = datetime_convert();
+               $updated['avatar-date'] = DateTimeFormat::utcNow();
 
                dba::update('contact', $updated, ['id' => $contact_id], $contact);
 
@@ -1025,7 +1026,7 @@ class Contact extends BaseObject
                        if ($photos) {
                                dba::update(
                                        'contact',
-                                       ['avatar' => $avatar, 'photo' => $photos[0], 'thumb' => $photos[1], 'micro' => $photos[2], 'avatar-date' => datetime_convert()],
+                                       ['avatar' => $avatar, 'photo' => $photos[0], 'thumb' => $photos[1], 'micro' => $photos[2], 'avatar-date' => DateTimeFormat::utcNow()],
                                        ['id' => $cid]
                                );
 
@@ -1260,7 +1261,7 @@ class Contact extends BaseObject
                        // create contact record
                        dba::insert('contact', [
                                'uid'     => $uid,
-                               'created' => datetime_convert(),
+                               'created' => DateTimeFormat::utcNow(),
                                'url'     => $ret['url'],
                                'nurl'    => normalise_link($ret['url']),
                                'addr'    => $ret['addr'],
@@ -1468,4 +1469,56 @@ class Contact extends BaseObject
                        Contact::remove($contact['id']);
                }
        }
+
+       /**
+        * @brief Create a birthday event.
+        *
+        * Update the year and the birthday.
+        */
+       public static function updateBirthdays()
+       {
+               // This only handles foreign or alien networks where a birthday has been provided.
+               // In-network birthdays are handled within local_delivery
+
+               $r = q("SELECT * FROM `contact` WHERE `bd` != '' AND `bd` > '0001-01-01' AND SUBSTRING(`bd`, 1, 4) != `bdyear` ");
+               if (DBM::is_result($r)) {
+                       foreach ($r as $rr) {
+                               logger('update_contact_birthday: ' . $rr['bd']);
+
+                               $nextbd = DateTimeFormat::utcNow('Y') . substr($rr['bd'], 4);
+
+                               /*
+                                * Add new birthday event for this person
+                                *
+                                * $bdtext is just a readable placeholder in case the event is shared
+                                * with others. We will replace it during presentation to our $importer
+                                * to contain a sparkle link and perhaps a photo.
+                                */
+
+                               // Check for duplicates
+                               $s = q("SELECT `id` FROM `event` WHERE `uid` = %d AND `cid` = %d AND `start` = '%s' AND `type` = '%s' LIMIT 1",
+                                       intval($rr['uid']), intval($rr['id']), dbesc(DateTimeFormat::utc($nextbd)), dbesc('birthday'));
+
+                               if (DBM::is_result($s)) {
+                                       continue;
+                               }
+
+                               $bdtext = L10n::t('%s\'s birthday', $rr['name']);
+                               $bdtext2 = L10n::t('Happy Birthday %s', ' [url=' . $rr['url'] . ']' . $rr['name'] . '[/url]');
+
+                               q("INSERT INTO `event` (`uid`,`cid`,`created`,`edited`,`start`,`finish`,`summary`,`desc`,`type`,`adjust`)
+                               VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%d' ) ", intval($rr['uid']), intval($rr['id']),
+                                       dbesc(DateTimeFormat::utcNow()), dbesc(DateTimeFormat::utcNow()), dbesc(DateTimeFormat::utc($nextbd)),
+                                       dbesc(DateTimeFormat::utc($nextbd . ' + 1 day ')), dbesc($bdtext), dbesc($bdtext2), dbesc('birthday'),
+                                       intval(0)
+                               );
+
+
+                               // update bdyear
+                               q("UPDATE `contact` SET `bdyear` = '%s', `bd` = '%s' WHERE `uid` = %d AND `id` = %d", dbesc(substr($nextbd, 0, 4)),
+                                       dbesc($nextbd), intval($rr['uid']), intval($rr['id'])
+                               );
+                       }
+               }
+       }
 }
index 0d0969ca0cdc700c7843d171b7852fefc350e3b4..5e75ba5a54faca6607a8d0a0dadb371486477a31 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * @file src/Model/GlobalContact.php
  * @brief This file includes the GlobalContact class with directory related functions
@@ -13,6 +14,7 @@ use Friendica\Model\Contact;
 use Friendica\Model\Profile;
 use Friendica\Network\Probe;
 use Friendica\Protocol\PortableContact;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
 use dba;
 use Exception;
@@ -118,12 +120,12 @@ class GContact
                                intval($uid),
                                intval($gcid),
                                intval($zcid),
-                               dbesc(datetime_convert())
+                               dbesc(DateTimeFormat::utcNow())
                        );
                } else {
                        q(
                                "UPDATE `glink` SET `updated` = '%s' WHERE `cid` = %d AND `uid` = %d AND `gcid` = %d AND `zcid` = %d",
-                               dbesc(datetime_convert()),
+                               dbesc(DateTimeFormat::utcNow()),
                                intval($cid),
                                intval($uid),
                                intval($gcid),
@@ -715,8 +717,8 @@ class GContact
                                dbesc($contact["url"]),
                                dbesc(normalise_link($contact["url"])),
                                dbesc($contact["photo"]),
-                               dbesc(datetime_convert()),
-                               dbesc(datetime_convert()),
+                               dbesc(DateTimeFormat::utcNow()),
+                               dbesc(DateTimeFormat::utcNow()),
                                dbesc($contact["location"]),
                                dbesc($contact["about"]),
                                intval($contact["hide"]),
@@ -1048,7 +1050,7 @@ class GContact
 
                foreach ($r as $server) {
                        self::fetchGsUsers($server["url"]);
-                       q("UPDATE `gserver` SET `last_poco_query` = '%s' WHERE `nurl` = '%s'", dbesc(datetime_convert()), dbesc($server["nurl"]));
+                       q("UPDATE `gserver` SET `last_poco_query` = '%s' WHERE `nurl` = '%s'", dbesc(DateTimeFormat::utcNow()), dbesc($server["nurl"]));
                }
        }
 
index 7545375181cf42a8c5fe73cbdedc2e53c15011a0..d83546e340a2f3da2116ca05188cd6a0898caf0b 100644 (file)
@@ -22,6 +22,7 @@ use Friendica\Model\Term;
 use Friendica\Object\Image;
 use Friendica\Protocol\Diaspora;
 use Friendica\Protocol\OStatus;
+use Friendica\Util\DateTimeFormat;
 use dba;
 use Text_LanguageDetect;
 
@@ -148,7 +149,7 @@ class Item extends BaseObject
 
                // Set the item to "deleted"
                dba::update('item', ['deleted' => true, 'title' => '', 'body' => '',
-                                       'edited' => datetime_convert(), 'changed' => datetime_convert()],
+                                       'edited' => DateTimeFormat::utcNow(), 'changed' => DateTimeFormat::utcNow()],
                                ['id' => $item['id']]);
 
                create_tags_from_item($item['id']);
@@ -300,11 +301,11 @@ class Item extends BaseObject
                $arr['owner-name']    = trim(defaults($arr, 'owner-name', ''));
                $arr['owner-link']    = trim(defaults($arr, 'owner-link', ''));
                $arr['owner-avatar']  = trim(defaults($arr, 'owner-avatar', ''));
-               $arr['received']      = ((x($arr, 'received') !== false) ? datetime_convert('UTC','UTC', $arr['received']) : datetime_convert());
-               $arr['created']       = ((x($arr, 'created') !== false) ? datetime_convert('UTC','UTC', $arr['created']) : $arr['received']);
-               $arr['edited']        = ((x($arr, 'edited') !== false) ? datetime_convert('UTC','UTC', $arr['edited']) : $arr['created']);
-               $arr['changed']       = ((x($arr, 'changed') !== false) ? datetime_convert('UTC','UTC', $arr['changed']) : $arr['created']);
-               $arr['commented']     = ((x($arr, 'commented') !== false) ? datetime_convert('UTC','UTC', $arr['commented']) : $arr['created']);
+               $arr['received']      = ((x($arr, 'received') !== false) ? DateTimeFormat::utc($arr['received']) : DateTimeFormat::utcNow());
+               $arr['created']       = ((x($arr, 'created') !== false) ? DateTimeFormat::utc($arr['created']) : $arr['received']);
+               $arr['edited']        = ((x($arr, 'edited') !== false) ? DateTimeFormat::utc($arr['edited']) : $arr['created']);
+               $arr['changed']       = ((x($arr, 'changed') !== false) ? DateTimeFormat::utc($arr['changed']) : $arr['created']);
+               $arr['commented']     = ((x($arr, 'commented') !== false) ? DateTimeFormat::utc($arr['commented']) : $arr['created']);
                $arr['title']         = trim(defaults($arr, 'title', ''));
                $arr['location']      = trim(defaults($arr, 'location', ''));
                $arr['coord']         = trim(defaults($arr, 'coord', ''));
@@ -340,13 +341,13 @@ class Item extends BaseObject
                }
 
                // Items cannot be stored before they happen ...
-               if ($arr['created'] > datetime_convert()) {
-                       $arr['created'] = datetime_convert();
+               if ($arr['created'] > DateTimeFormat::utcNow()) {
+                       $arr['created'] = DateTimeFormat::utcNow();
                }
 
                // We haven't invented time travel by now.
-               if ($arr['edited'] > datetime_convert()) {
-                       $arr['edited'] = datetime_convert();
+               if ($arr['edited'] > DateTimeFormat::utcNow()) {
+                       $arr['edited'] = DateTimeFormat::utcNow();
                }
 
                if (($arr['author-link'] == "") && ($arr['owner-link'] == "")) {
@@ -740,9 +741,9 @@ class Item extends BaseObject
                // update the commented timestamp on the parent
                // Only update "commented" if it is really a comment
                if (($arr['verb'] == ACTIVITY_POST) || !Config::get("system", "like_no_comment")) {
-                       dba::update('item', ['commented' => datetime_convert(), 'changed' => datetime_convert()], ['id' => $parent_id]);
+                       dba::update('item', ['commented' => DateTimeFormat::utcNow(), 'changed' => DateTimeFormat::utcNow()], ['id' => $parent_id]);
                } else {
-                       dba::update('item', ['changed' => datetime_convert()], ['id' => $parent_id]);
+                       dba::update('item', ['changed' => DateTimeFormat::utcNow()], ['id' => $parent_id]);
                }
 
                if ($dsprsig) {
@@ -1642,7 +1643,7 @@ class Item extends BaseObject
                        intval($wall ? 1 : 0)
                );
                if (DBM::is_result($r)) {
-                       return substr(datetime_convert('',date_default_timezone_get(), $r[0]['created']),0,10);
+                       return substr(DateTimeFormat::local($r[0]['created']),0,10);
                }
                return false;
        }
@@ -1774,7 +1775,7 @@ class Item extends BaseObject
                        $like_item = $existing_like[0];
 
                        // Already voted, undo it
-                       $fields = ['deleted' => true, 'unseen' => true, 'changed' => datetime_convert()];
+                       $fields = ['deleted' => true, 'unseen' => true, 'changed' => DateTimeFormat::utcNow()];
                        dba::update('item', $fields, ['id' => $like_item['id']]);
 
                        // Clean up the Diaspora signatures for this like
index be68f515f1c20c92dc75e844774c6a86f7063626..f9b4c4d6dbddba324d2b4c84d9a47160ca28b4b7 100644 (file)
@@ -1,14 +1,16 @@
 <?php
+
 /**
  * @file src/Model/Mail.php
  */
 namespace Friendica\Model;
 
-use Friendica\App;
 use Friendica\Core\L10n;
 use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
+use Friendica\Network\Probe;
+use Friendica\Util\DateTimeFormat;
 use dba;
 
 require_once 'include/dba.php';
@@ -80,7 +82,7 @@ class Mail
                        $handles = $recip_handle . ';' . $sender_handle;
 
                        $fields = ['uid' => local_user(), 'guid' => $conv_guid, 'creator' => $sender_handle,
-                               'created' => datetime_convert(), 'updated' => datetime_convert(),
+                               'created' => DateTimeFormat::utcNow(), 'updated' => DateTimeFormat::utcNow(),
                                'subject' => $subject, 'recips' => $handles];
                        if (dba::insert('conv', $fields)) {
                                $convid = dba::lastInsertId();
@@ -114,7 +116,7 @@ class Mail
                                'replied' => 0,
                                'uri' => $uri,
                                'parent-uri' => $replyto,
-                               'created' => datetime_convert()
+                               'created' => DateTimeFormat::utcNow()
                        ]
                );
 
@@ -194,12 +196,12 @@ class Mail
 
                $convid = null;
                $fields = ['uid' => $recipient['uid'], 'guid' => $conv_guid, 'creator' => $sender_handle,
-                       'created' => datetime_convert(), 'updated' => datetime_convert(),
+                       'created' => DateTimeFormat::utcNow(), 'updated' => DateTimeFormat::utcNow(),
                        'subject' => $subject, 'recips' => $handles];
                if (dba::insert('conv', $fields)) {
                        $convid = dba::lastInsertId();
                }
-               
+
                if (!$convid) {
                        logger('send message: conversation not found.');
                        return -4;
@@ -222,7 +224,7 @@ class Mail
                                'replied' => 0,
                                'uri' => $uri,
                                'parent-uri' => $replyto,
-                               'created' => datetime_convert(),
+                               'created' => DateTimeFormat::utcNow(),
                                'unknown' => 1
                        ]
                );
index fc6e60a9cef4d61a5b8167bf41c2c2a9e36a91cb..cf31849c8d23c1e2a7971c4cd3d2ffc9104a724c 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * @file src/Model/Photo.php
  * @brief This file contains the Photo class for database interface
@@ -8,10 +9,10 @@ namespace Friendica\Model;
 use Friendica\Core\Cache;
 use Friendica\Core\Config;
 use Friendica\Core\L10n;
-use Friendica\Core\PConfig;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
 use Friendica\Object\Image;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
 use dba;
 
@@ -54,8 +55,8 @@ class Photo
                        'contact-id' => $cid,
                        'guid' => $guid,
                        'resource-id' => $rid,
-                       'created' => datetime_convert(),
-                       'edited' => datetime_convert(),
+                       'created' => DateTimeFormat::utcNow(),
+                       'edited' => DateTimeFormat::utcNow(),
                        'filename' => basename($filename),
                        'type' => $Image->getType(),
                        'album' => $album,
index 8b7ce8d34ae80ee3b9536494a9e9e25502594e14..c360a13d09b638a6934b762070ac7eef3c7a4c81 100644 (file)
@@ -5,6 +5,7 @@
 namespace Friendica\Model;
 
 use Friendica\BaseObject;
+use Friendica\Util\DateTimeFormat;
 use dba;
 
 require_once 'include/dba.php';
@@ -33,7 +34,7 @@ class Process extends BaseObject
                dba::transaction();
 
                if (!dba::exists('process', ['pid' => $pid])) {
-                       $return = dba::insert('process', ['pid' => $pid, 'command' => $command, 'created' => datetime_convert()]);
+                       $return = dba::insert('process', ['pid' => $pid, 'command' => $command, 'created' => DateTimeFormat::utcNow()]);
                }
 
                dba::commit();
index df53b5d80a5faa1d8e6fc2931d84b145ce2d70fb..0dce1c08c67e4bffa272947380a62a0fcdb69d9b 100644 (file)
@@ -17,6 +17,7 @@ use Friendica\Core\Worker;
 use Friendica\Database\DBM;
 use Friendica\Model\Contact;
 use Friendica\Protocol\Diaspora;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
 use dba;
 
@@ -555,8 +556,8 @@ class Profile
                                WHERE `event`.`uid` = ? AND `type` = 'birthday' AND `start` < ? AND `finish` > ?
                                ORDER BY `start` ASC ",
                                local_user(),
-                               datetime_convert('UTC', 'UTC', 'now + 6 days'),
-                               datetime_convert('UTC', 'UTC', 'now')
+                               DateTimeFormat::utc('now + 6 days'),
+                               DateTimeFormat::utcNow()
                        );
                        if (DBM::is_result($s)) {
                                $r = dba::inArray($s);
@@ -599,7 +600,7 @@ class Profile
 
                                        $rr['link'] = $url;
                                        $rr['title'] = $rr['name'];
-                                       $rr['date'] = day_translate(datetime_convert('UTC', $a->timezone, $rr['start'], $rr['adjust'] ? $bd_format : $bd_short)) . (($today) ? ' ' . L10n::t('[today]') : '');
+                                       $rr['date'] = day_translate(DateTimeFormat::convert($rr['start'], $a->timezone, 'UTC', $rr['adjust'] ? $bd_format : $bd_short)) . (($today) ? ' ' . L10n::t('[today]') : '');
                                        $rr['startime'] = null;
                                        $rr['today'] = $today;
                                }
@@ -643,8 +644,8 @@ class Profile
                        WHERE `event`.`uid` = ? AND `type` != 'birthday' AND `start` < ? AND `start` >= ?
                        ORDER BY `start` ASC ",
                        local_user(),
-                       datetime_convert('UTC', 'UTC', 'now + 7 days'),
-                       datetime_convert('UTC', 'UTC', 'now - 1 days')
+                       DateTimeFormat::utc('now + 7 days'),
+                       DateTimeFormat::utc('now - 1 days')
                );
 
                $r = [];
@@ -657,8 +658,8 @@ class Profile
                                        $total ++;
                                }
 
-                               $strt = datetime_convert('UTC', $rr['convert'] ? $a->timezone : 'UTC', $rr['start'], 'Y-m-d');
-                               if ($strt === datetime_convert('UTC', $a->timezone, 'now', 'Y-m-d')) {
+                               $strt = DateTimeFormat::convert($rr['start'], $rr['convert'] ? $a->timezone : 'UTC', 'UTC', 'Y-m-d');
+                               if ($strt === DateTimeFormat::timezoneNow($a->timezone, 'Y-m-d')) {
                                        $istoday = true;
                                }
 
@@ -673,17 +674,17 @@ class Profile
                                        $description = L10n::t('[No description]');
                                }
 
-                               $strt = datetime_convert('UTC', $rr['convert'] ? $a->timezone : 'UTC', $rr['start']);
+                               $strt = DateTimeFormat::convert($rr['start'], $rr['convert'] ? $a->timezone : 'UTC');
 
-                               if (substr($strt, 0, 10) < datetime_convert('UTC', $a->timezone, 'now', 'Y-m-d')) {
+                               if (substr($strt, 0, 10) < DateTimeFormat::timezoneNow($a->timezone, 'Y-m-d')) {
                                        continue;
                                }
 
-                               $today = ((substr($strt, 0, 10) === datetime_convert('UTC', $a->timezone, 'now', 'Y-m-d')) ? true : false);
+                               $today = ((substr($strt, 0, 10) === DateTimeFormat::timezoneNow($a->timezone, 'Y-m-d')) ? true : false);
 
                                $rr['title'] = $title;
                                $rr['description'] = $description;
-                               $rr['date'] = day_translate(datetime_convert('UTC', $rr['adjust'] ? $a->timezone : 'UTC', $rr['start'], $bd_format)) . (($today) ? ' ' . L10n::t('[today]') : '');
+                               $rr['date'] = day_translate(DateTimeFormat::convert($rr['start'], $rr['adjust'] ? $a->timezone : 'UTC', 'UTC', $bd_format)) . (($today) ? ' ' . L10n::t('[today]') : '');
                                $rr['startime'] = $strt;
                                $rr['today'] = $today;
 
@@ -728,9 +729,11 @@ class Profile
                                $year_bd_format = L10n::t('j F, Y');
                                $short_bd_format = L10n::t('j F');
 
-                               $val = intval($a->profile['dob']) ?
-                                       day_translate(datetime_convert('UTC', 'UTC', $a->profile['dob'] . ' 00:00 +00:00', $year_bd_format))
-                                       : day_translate(datetime_convert('UTC', 'UTC', '2001-' . substr($a->profile['dob'], 5) . ' 00:00 +00:00', $short_bd_format));
+                               $val = day_translate(
+                                       intval($a->profile['dob']) ?
+                                               DateTimeFormat::utc($a->profile['dob'] . ' 00:00 +00:00', $year_bd_format)
+                                               : DateTimeFormat::utc('2001-' . substr($a->profile['dob'], 5) . ' 00:00 +00:00', $short_bd_format)
+                               );
 
                                $profile['birthday'] = [L10n::t('Birthday:'), $val];
                        }
index 3c262ddb08507d9f56ef476cd325010e389e176a..da7a8b3e58c126740cc73cf21dfe022715c5bec7 100644 (file)
@@ -6,6 +6,7 @@ namespace Friendica\Model;
 
 use Friendica\Core\Config;
 use Friendica\Database\DBM;
+use Friendica\Util\DateTimeFormat;
 use dba;
 
 require_once 'include/dba.php';
@@ -19,9 +20,9 @@ class Queue
        public static function updateTime($id)
        {
                logger('queue: requeue item ' . $id);
-               dba::update('queue', ['last' => datetime_convert()], ['id' => $id]);
+               dba::update('queue', ['last' => DateTimeFormat::utcNow()], ['id' => $id]);
        }
-       
+
        /**
         * @param string $id id
         */
@@ -30,7 +31,7 @@ class Queue
                logger('queue: remove queue item ' . $id);
                dba::delete('queue', ['id' => $id]);
        }
-       
+
        /**
         * @brief Checks if the communication with a given contact had problems recently
         *
@@ -45,9 +46,9 @@ class Queue
                        AND `last` > UTC_TIMESTAMP() - INTERVAL 15 MINUTE LIMIT 1",
                        intval($cid)
                );
-       
+
                $was_delayed = DBM::is_result($r);
-       
+
                // We set "term-date" to a current date if the communication has problems.
                // If the communication works again we reset this value.
                if ($was_delayed) {
@@ -56,10 +57,10 @@ class Queue
                        );
                        $was_delayed = !DBM::is_result($r);
                }
-       
+
                return $was_delayed;
        }
-       
+
        /**
         * @param string  $cid     cid
         * @param string  $network network
@@ -68,17 +69,17 @@ class Queue
         */
        public static function add($cid, $network, $msg, $batch = false)
        {
-       
+
                $max_queue = Config::get('system', 'max_contact_queue');
                if ($max_queue < 1) {
                        $max_queue = 500;
                }
-       
+
                $batch_queue = Config::get('system', 'max_batch_queue');
                if ($batch_queue < 1) {
                        $batch_queue = 1000;
                }
-       
+
                $r = q("SELECT COUNT(*) AS `total` FROM `queue` INNER JOIN `contact` ON `queue`.`cid` = `contact`.`id`
                        WHERE `queue`.`cid` = %d AND `contact`.`self` = 0 ",
                        intval($cid)
@@ -93,7 +94,14 @@ class Queue
                                return;
                        }
                }
-       
-               dba::insert('queue', ['cid' => $cid, 'network' => $network, 'created' => datetime_convert(), 'last' => datetime_convert(), 'content' => $msg, 'batch' =>($batch) ? 1 : 0]);
+
+               dba::insert('queue', [
+                       'cid'     => $cid,
+                       'network' => $network,
+                       'created' => DateTimeFormat::utcNow(),
+                       'last'    => DateTimeFormat::utcNow(),
+                       'content' => $msg,
+                       'batch'   =>($batch) ? 1 : 0
+               ]);
        }
 }
index c8409b58431d6106069281338332a73b4263b642..7cf7fea2e6562b96f4041326726796750ac98a6f 100644 (file)
@@ -7,8 +7,8 @@ namespace Friendica\Model;
 
 use Friendica\Core\Addon;
 use Friendica\Core\Config;
-use Friendica\Core\PConfig;
 use Friendica\Core\L10n;
+use Friendica\Core\PConfig;
 use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
@@ -17,9 +17,11 @@ use Friendica\Model\Group;
 use Friendica\Model\Photo;
 use Friendica\Object\Image;
 use Friendica\Util\Crypto;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
 use dba;
 use Exception;
+use LightOpenID;
 
 require_once 'boot.php';
 require_once 'include/dba.php';
@@ -286,7 +288,7 @@ class User
                                $_SESSION['register'] = 1;
                                $_SESSION['openid'] = $openid_url;
 
-                               $openid = new \LightOpenID;
+                               $openid = new LightOpenID;
                                $openid->identity = $openid_url;
                                $openid->returnUrl = System::baseUrl() . '/openid';
                                $openid->required = ['namePerson/friendly', 'contact/email', 'namePerson'];
@@ -394,7 +396,7 @@ class User
                        'verified' => $verified,
                        'blocked'  => $blocked,
                        'timezone' => 'UTC',
-                       'register_date' => datetime_convert(),
+                       'register_date' => DateTimeFormat::utcNow(),
                        'default-location' => ''
                ]);
 
@@ -611,7 +613,7 @@ class User
                dba::insert('userd', ['username' => $user['nickname']]);
 
                // The user and related data will be deleted in "cron_expire_and_remove_users" (cronjobs.php)
-               dba::update('user', ['account_removed' => true, 'account_expires_on' => datetime_convert()], ['uid' => $uid]);
+               dba::update('user', ['account_removed' => true, 'account_expires_on' => DateTimeFormat::utcNow()], ['uid' => $uid]);
                Worker::add(PRIORITY_HIGH, "Notifier", "removeme", $uid);
 
                // Send an update to the directory
index ae7277329d373d53bb4891e938dc1e5fb490e112..53ab57585f5d6a6261ea91922f66331dae73c6ce 100644 (file)
@@ -10,8 +10,11 @@ use Friendica\Core\Config;
 use Friendica\Core\L10n;
 use Friendica\Database\DBM;
 use Friendica\Model\User;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
 use dba;
+use Exception;
+use LightOpenID;
 
 require_once 'boot.php';
 require_once 'include/datetime.php';
@@ -68,7 +71,7 @@ class Login extends BaseModule
 
                        // Otherwise it's probably an openid.
                        try {
-                               $openid = new \LightOpenID;
+                               $openid = new LightOpenID;
                                $openid->identity = $openid_url;
                                $_SESSION['openid'] = $openid_url;
                                $_SESSION['remember'] = $_POST['remember'];
@@ -118,7 +121,7 @@ class Login extends BaseModule
 
                        // if we haven't failed up this point, log them in.
                        $_SESSION['remember'] = $_POST['remember'];
-                       $_SESSION['last_login_date'] = datetime_convert('UTC', 'UTC');
+                       $_SESSION['last_login_date'] = DateTimeFormat::utcNow();
                        authenticate_success($record, true, true);
 
                        if (x($_SESSION, 'return_url')) {
@@ -217,10 +220,10 @@ class Login extends BaseModule
                                // stays logged in for a long time, e.g. with "Remember Me"
                                $login_refresh = false;
                                if (!x($_SESSION['last_login_date'])) {
-                                       $_SESSION['last_login_date'] = datetime_convert('UTC', 'UTC');
+                                       $_SESSION['last_login_date'] = DateTimeFormat::utcNow();
                                }
-                               if (strcmp(datetime_convert('UTC', 'UTC', 'now - 12 hours'), $_SESSION['last_login_date']) > 0) {
-                                       $_SESSION['last_login_date'] = datetime_convert('UTC', 'UTC');
+                               if (strcmp(DateTimeFormat::utc('now - 12 hours'), $_SESSION['last_login_date']) > 0) {
+                                       $_SESSION['last_login_date'] = DateTimeFormat::utcNow();
                                        $login_refresh = true;
                                }
                                authenticate_success($user, false, false, $login_refresh);
index 5efa5f2432cfd37e678a04e010472e3bc28879dc..8af267be3de557ab082220e14aeed30403b972c8 100644 (file)
@@ -9,6 +9,7 @@ use Friendica\Core\PConfig;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
 use Friendica\Network\FKOAuthDataStore;
+use Friendica\Util\DateTimeFormat;
 use dba;
 use OAuthServer;
 use OAuthSignatureMethod_HMAC_SHA1;
@@ -67,7 +68,7 @@ class FKOAuth1 extends OAuthServer
                        $_SESSION['cid'] = $a->cid;
                }
 
-               dba::update('user', ['login_date' => datetime_convert()], ['uid' => $_SESSION['uid']]);
+               dba::update('user', ['login_date' => DateTimeFormat::utcNow()], ['uid' => $_SESSION['uid']]);
 
                Addon::callHooks('logged_in', $a->user);
        }
index 67ce3b7cce88ccd5ee0fe998ddae8460cf7f92bb..198ca658061a203c9b23f7d49c13abea20f37811 100644 (file)
@@ -13,6 +13,7 @@ use Friendica\Core\PConfig;
 use Friendica\Database\DBM;
 use Friendica\Model\Contact;
 use Friendica\Model\Profile;
+use Friendica\Util\DateTimeFormat;
 use dba;
 
 require_once 'include/dba.php';
@@ -123,7 +124,7 @@ class Post extends BaseObject
                if (strtotime($item['edited']) - strtotime($item['created']) > 1) {
                        $edited = [
                                'label'    => L10n::t('This entry was edited'),
-                               'date'     => datetime_convert('UTC', date_default_timezone_get(), $item['edited'], 'r'),
+                               'date'     => DateTimeFormat::local($item['edited'], 'r'),
                                'relative' => relative_date($item['edited'])
                        ];
                }
@@ -300,7 +301,7 @@ class Post extends BaseObject
 
                $comment = $this->getCommentBox($indent);
 
-               if (strcmp(datetime_convert('UTC', 'UTC', $item['created']), datetime_convert('UTC', 'UTC', 'now - 12 hours')) > 0) {
+               if (strcmp(DateTimeFormat::utc($item['created']), DateTimeFormat::utc('now - 12 hours')) > 0) {
                        $shiny = 'shiny';
                }
 
@@ -363,7 +364,7 @@ class Post extends BaseObject
                        'osparkle'        => $osparkle,
                        'sparkle'         => $sparkle,
                        'title'           => $title_e,
-                       'localtime'       => datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'r'),
+                       'localtime'       => DateTimeFormat::local($item['created'], 'r'),
                        'ago'             => $item['app'] ? L10n::t('%s from %s', relative_date($item['created']), $item['app']) : relative_date($item['created']),
                        'app'             => $item['app'],
                        'created'         => relative_date($item['created']),
index 6a839813712f14093e28a718bed47e753d28d7c6..2269bffcfdc49db18de53961044f2f88a9dbe701 100644 (file)
@@ -26,6 +26,7 @@ use Friendica\Model\User;
 use Friendica\Object\Image;
 use Friendica\Protocol\OStatus;
 use Friendica\Util\Crypto;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
 use Friendica\Util\XML;
 use Friendica\Content\Text\BBCode;
@@ -228,7 +229,7 @@ class DFRN
                        }
                }
 
-               $check_date = datetime_convert('UTC', 'UTC', $last_update, 'Y-m-d H:i:s');
+               $check_date = DateTimeFormat::utc($last_update);
 
                $r = q(
                        "SELECT `item`.*, `item`.`id` AS `item_id`,
@@ -420,7 +421,7 @@ class DFRN
 
                XML::addElement($doc, $mail, "dfrn:id", $item['uri']);
                XML::addElement($doc, $mail, "dfrn:in-reply-to", $item['parent-uri']);
-               XML::addElement($doc, $mail, "dfrn:sentdate", datetime_convert('UTC', 'UTC', $item['created'] . '+00:00', ATOM_TIME));
+               XML::addElement($doc, $mail, "dfrn:sentdate", DateTimeFormat::utc($item['created'] . '+00:00', DateTimeFormat::ATOM));
                XML::addElement($doc, $mail, "dfrn:subject", $item['title']);
                XML::addElement($doc, $mail, "dfrn:content", $item['body']);
 
@@ -586,7 +587,7 @@ class DFRN
 
                /// @todo We need a way to transmit the different page flags like "PAGE_PRVGROUP"
 
-               XML::addElement($doc, $root, "updated", datetime_convert("UTC", "UTC", "now", ATOM_TIME));
+               XML::addElement($doc, $root, "updated", DateTimeFormat::utcNow(DateTimeFormat::ATOM));
 
                $author = self::addAuthor($doc, $owner, $authorelement, $public);
                $root->appendChild($author);
@@ -621,9 +622,9 @@ class DFRN
 
                $author = $doc->createElement($authorelement);
 
-               $namdate = datetime_convert('UTC', 'UTC', $owner['name-date'].'+00:00', ATOM_TIME);
-               $uridate = datetime_convert('UTC', 'UTC', $owner['uri-date'].'+00:00', ATOM_TIME);
-               $picdate = datetime_convert('UTC', 'UTC', $owner['avatar-date'].'+00:00', ATOM_TIME);
+               $namdate = DateTimeFormat::utc($owner['name-date'].'+00:00', DateTimeFormat::ATOM);
+               $uridate = DateTimeFormat::utc($owner['uri-date'].'+00:00', DateTimeFormat::ATOM);
+               $picdate = DateTimeFormat::utc($owner['avatar-date'].'+00:00', DateTimeFormat::ATOM);
 
                $attributes = [];
 
@@ -902,7 +903,7 @@ class DFRN
                }
 
                if ($item['deleted']) {
-                       $attributes = ["ref" => $item['uri'], "when" => datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00', ATOM_TIME)];
+                       $attributes = ["ref" => $item['uri'], "when" => DateTimeFormat::utc($item['edited'] . '+00:00', DateTimeFormat::ATOM)];
                        return XML::createElement($doc, "at:deleted-entry", "", $attributes);
                }
 
@@ -982,8 +983,8 @@ class DFRN
                XML::addElement($doc, $entry, "id", $item["uri"]);
                XML::addElement($doc, $entry, "title", $item["title"]);
 
-               XML::addElement($doc, $entry, "published", datetime_convert("UTC", "UTC", $item["created"] . "+00:00", ATOM_TIME));
-               XML::addElement($doc, $entry, "updated", datetime_convert("UTC", "UTC", $item["edited"] . "+00:00", ATOM_TIME));
+               XML::addElement($doc, $entry, "published", DateTimeFormat::utc($item["created"] . "+00:00", DateTimeFormat::ATOM));
+               XML::addElement($doc, $entry, "updated", DateTimeFormat::utc($item["edited"] . "+00:00", DateTimeFormat::ATOM));
 
                // "dfrn:env" is used to read the content
                XML::addElement($doc, $entry, "dfrn:env", base64url_encode($body, true));
@@ -1387,7 +1388,7 @@ class DFRN
                        "SELECT `id` FROM `event` WHERE `uid` = %d AND `cid` = %d AND `start` = '%s' AND `type` = '%s' LIMIT 1",
                        intval($contact["uid"]),
                        intval($contact["id"]),
-                       dbesc(datetime_convert("UTC", "UTC", $birthday)),
+                       dbesc(DateTimeFormat::utc($birthday)),
                        dbesc("birthday")
                );
 
@@ -1405,10 +1406,10 @@ class DFRN
                        VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s') ",
                        intval($contact["uid"]),
                        intval($contact["id"]),
-                       dbesc(datetime_convert()),
-                       dbesc(datetime_convert()),
-                       dbesc(datetime_convert("UTC", "UTC", $birthday)),
-                       dbesc(datetime_convert("UTC", "UTC", $birthday . " + 1 day ")),
+                       dbesc(DateTimeFormat::utcNow()),
+                       dbesc(DateTimeFormat::utcNow()),
+                       dbesc(DateTimeFormat::utc($birthday)),
+                       dbesc(DateTimeFormat::utc($birthday . " + 1 day ")),
                        dbesc($bdtext),
                        dbesc($bdtext2),
                        dbesc("birthday")
@@ -1888,7 +1889,7 @@ class DFRN
                        intval($suggest["cid"]),
                        dbesc($suggest["body"]),
                        dbesc($hash),
-                       dbesc(datetime_convert()),
+                       dbesc(DateTimeFormat::utcNow()),
                        intval(0)
                );
 
@@ -2080,13 +2081,13 @@ class DFRN
 
                if (self::isEditedTimestampNewer($current, $item)) {
                        // do not accept (ignore) an earlier edit than one we currently have.
-                       if (datetime_convert("UTC", "UTC", $item["edited"]) < $current["edited"]) {
+                       if (DateTimeFormat::utc($item["edited"]) < $current["edited"]) {
                                return false;
                        }
 
                        $fields = ['title' => $item["title"], 'body' => $item["body"],
-                                       'tag' => $item["tag"], 'changed' => datetime_convert(),
-                                       'edited' => datetime_convert("UTC", "UTC", $item["edited"])];
+                                       'tag' => $item["tag"], 'changed' => DateTimeFormat::utcNow(),
+                                       'edited' => DateTimeFormat::utc($item["edited"])];
 
                        $condition = ["`uri` = ? AND `uid` IN (0, ?)", $item["uri"], $importer["importer_uid"]];
                        dba::update('item', $fields, $condition);
@@ -2421,7 +2422,7 @@ class DFRN
 
                // Is there an existing item?
                if (DBM::is_result($current) && self::isEditedTimestampNewer($current[0], $item)
-                       && (datetime_convert("UTC", "UTC", $item["edited"]) < $current[0]["edited"])
+                       && (DateTimeFormat::utc($item["edited"]) < $current[0]["edited"])
                ) {
                        logger("Item ".$item["uri"]." already existed.", LOGGER_DEBUG);
                        return;
@@ -2752,9 +2753,9 @@ class DFRN
                        }
                }
                if ($when) {
-                       $when = datetime_convert("UTC", "UTC", $when, "Y-m-d H:i:s");
+                       $when = DateTimeFormat::utc($when);
                } else {
-                       $when = datetime_convert("UTC", "UTC", "now", "Y-m-d H:i:s");
+                       $when = DateTimeFormat::utcNow();
                }
 
                if (!$uri || !$importer["id"]) {
@@ -2835,7 +2836,7 @@ class DFRN
                                                `body` = '', `title` = ''
                                        WHERE `parent-uri` = '%s' AND `uid` IN (0, %d)",
                                        dbesc($when),
-                                       dbesc(datetime_convert()),
+                                       dbesc(DateTimeFormat::utcNow()),
                                        dbesc($uri),
                                        intval($importer["uid"])
                                );
@@ -2848,7 +2849,7 @@ class DFRN
                                                `body` = '', `title` = ''
                                        WHERE `uri` = '%s' AND `uid` IN (0, %d)",
                                        dbesc($when),
-                                       dbesc(datetime_convert()),
+                                       dbesc(DateTimeFormat::utcNow()),
                                        dbesc($uri),
                                        intval($importer["uid"])
                                );
@@ -3156,8 +3157,8 @@ class DFRN
                        return false;
                }
 
-               $existing_edited = datetime_convert('UTC', 'UTC', $existing['edited']);
-               $update_edited = datetime_convert('UTC', 'UTC', $update['edited']);
+               $existing_edited = DateTimeFormat::utc($existing['edited']);
+               $update_edited = DateTimeFormat::utc($update['edited']);
 
                return (strcmp($existing_edited, $update_edited) < 0);
        }
index c05db2eb1f2a671f2a16d25b283a7c5de810022c..1e5c5345f6da0525a1d0e30e386d088bb0997153 100644 (file)
@@ -9,12 +9,11 @@
  */
 namespace Friendica\Protocol;
 
-use Friendica\App;
-use Friendica\Core\System;
 use Friendica\Core\Cache;
 use Friendica\Core\Config;
 use Friendica\Core\L10n;
 use Friendica\Core\PConfig;
+use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
 use Friendica\Model\Contact;
@@ -26,6 +25,7 @@ use Friendica\Model\Queue;
 use Friendica\Model\User;
 use Friendica\Network\Probe;
 use Friendica\Util\Crypto;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
 use Friendica\Util\XML;
 use dba;
@@ -76,7 +76,7 @@ class Diaspora
                                $r = q(
                                        "INSERT INTO `contact` (`uid`, `created`, `name`, `nick`, `addr`, `url`, `nurl`, `batch`, `network`, `rel`, `blocked`, `pending`, `writable`, `name-date`, `uri-date`, `avatar-date`)
                                        VALUES (0, '%s', '%s', 'relay', '%s', '%s', '%s', '%s', '%s', %d, 0, 0, 1, '%s', '%s', '%s')",
-                                       datetime_convert(),
+                                       DateTimeFormat::utcNow(),
                                        dbesc($addr),
                                        dbesc($addr),
                                        dbesc($server),
@@ -84,9 +84,9 @@ class Diaspora
                                        dbesc($batch),
                                        dbesc(NETWORK_DIASPORA),
                                        intval(CONTACT_IS_FOLLOWER),
-                                       dbesc(datetime_convert()),
-                                       dbesc(datetime_convert()),
-                                       dbesc(datetime_convert())
+                                       dbesc(DateTimeFormat::utcNow()),
+                                       dbesc(DateTimeFormat::utcNow()),
+                                       dbesc(DateTimeFormat::utcNow())
                                );
 
                                $relais = q("SELECT `batch`, `id`, `name`,`network` FROM `contact` WHERE `uid` = 0 AND `batch` = '%s' LIMIT 1", dbesc($batch));
@@ -870,7 +870,7 @@ class Diaspora
                                dbesc($arr["confirm"]),
                                dbesc($arr["alias"]),
                                dbesc($arr["pubkey"]),
-                               dbesc(datetime_convert()),
+                               dbesc(DateTimeFormat::utcNow()),
                                dbesc($arr["url"]),
                                dbesc($arr["network"])
                        );
@@ -893,7 +893,7 @@ class Diaspora
                                dbesc($arr["network"]),
                                dbesc($arr["alias"]),
                                dbesc($arr["pubkey"]),
-                               dbesc(datetime_convert())
+                               dbesc(DateTimeFormat::utcNow())
                        );
                }
 
@@ -1653,9 +1653,9 @@ class Diaspora
                $text = unxmlify($data->text);
 
                if (isset($data->created_at)) {
-                       $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at)));
+                       $created_at = DateTimeFormat::utc(notags(unxmlify($data->created_at)));
                } else {
-                       $created_at = datetime_convert();
+                       $created_at = DateTimeFormat::utcNow();
                }
 
                if (isset($data->thread_parent_guid)) {
@@ -1785,7 +1785,7 @@ class Diaspora
                $msg_guid = notags(unxmlify($mesg->guid));
                $msg_conversation_guid = notags(unxmlify($mesg->conversation_guid));
                $msg_text = unxmlify($mesg->text);
-               $msg_created_at = datetime_convert("UTC", "UTC", notags(unxmlify($mesg->created_at)));
+               $msg_created_at = DateTimeFormat::utc(notags(unxmlify($mesg->created_at)));
 
                if ($msg_conversation_guid != $guid) {
                        logger("message conversation guid does not belong to the current conversation.");
@@ -1830,7 +1830,7 @@ class Diaspora
 
                dba::unlock();
 
-               dba::update('conv', ['updated' => datetime_convert()], ['id' => $conversation["id"]]);
+               dba::update('conv', ['updated' => DateTimeFormat::utcNow()], ['id' => $conversation["id"]]);
 
                notification(
                        [
@@ -1864,7 +1864,7 @@ class Diaspora
                $author = notags(unxmlify($data->author));
                $guid = notags(unxmlify($data->guid));
                $subject = notags(unxmlify($data->subject));
-               $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at)));
+               $created_at = DateTimeFormat::utc(notags(unxmlify($data->created_at)));
                $participants = notags(unxmlify($data->participants));
 
                $messages = $data->message;
@@ -1896,7 +1896,7 @@ class Diaspora
                                dbesc($guid),
                                dbesc($author),
                                dbesc($created_at),
-                               dbesc(datetime_convert()),
+                               dbesc(DateTimeFormat::utcNow()),
                                dbesc($subject),
                                dbesc($participants)
                        );
@@ -2097,7 +2097,7 @@ class Diaspora
                $guid = notags(unxmlify($data->guid));
                $conversation_guid = notags(unxmlify($data->conversation_guid));
                $text = unxmlify($data->text);
-               $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at)));
+               $created_at = DateTimeFormat::utc(notags(unxmlify($data->created_at)));
 
                $contact = self::allowedContactByHandle($importer, $author, true);
                if (!$contact) {
@@ -2163,7 +2163,7 @@ class Diaspora
 
                dba::unlock();
 
-               dba::update('conv', ['updated' => datetime_convert()], ['id' => $conversation["id"]]);
+               dba::update('conv', ['updated' => DateTimeFormat::utcNow()], ['id' => $conversation["id"]]);
                return true;
        }
 
@@ -2314,7 +2314,7 @@ class Diaspora
                $birthday = str_replace("1000", "1901", $birthday);
 
                if ($birthday != "") {
-                       $birthday = datetime_convert("UTC", "UTC", $birthday, "Y-m-d");
+                       $birthday = DateTimeFormat::utc($birthday, "Y-m-d");
                }
 
                // this is to prevent multiple birthday notifications in a single year
@@ -2330,7 +2330,7 @@ class Diaspora
                        dbesc($name),
                        dbesc($nick),
                        dbesc($author),
-                       dbesc(datetime_convert()),
+                       dbesc(DateTimeFormat::utcNow()),
                        dbesc($birthday),
                        dbesc($location),
                        dbesc($about),
@@ -2536,7 +2536,7 @@ class Diaspora
                        intval($importer["uid"]),
                        dbesc($ret["network"]),
                        dbesc($ret["addr"]),
-                       datetime_convert(),
+                       DateTimeFormat::utcNow(),
                        dbesc($ret["url"]),
                        dbesc(normalise_link($ret["url"])),
                        dbesc($batch),
@@ -2579,7 +2579,7 @@ class Diaspora
                                0,
                                dbesc(L10n::t("Sharing notification from Diaspora network")),
                                dbesc($hash),
-                               dbesc(datetime_convert())
+                               dbesc(DateTimeFormat::utcNow())
                        );
                } else {
                        // automatic friend approval
@@ -2610,8 +2610,8 @@ class Diaspora
                                WHERE `id` = %d
                                ",
                                intval($new_relation),
-                               dbesc(datetime_convert()),
-                               dbesc(datetime_convert()),
+                               dbesc(DateTimeFormat::utcNow()),
+                               dbesc(DateTimeFormat::utcNow()),
                                intval($contact_record["id"])
                        );
 
@@ -2715,7 +2715,7 @@ class Diaspora
        {
                $author = notags(unxmlify($data->author));
                $guid = notags(unxmlify($data->guid));
-               $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at)));
+               $created_at = DateTimeFormat::utc(notags(unxmlify($data->created_at)));
                $root_author = notags(unxmlify($data->root_author));
                $root_guid = notags(unxmlify($data->root_guid));
                /// @todo handle unprocessed property "provider_display_name"
@@ -2851,8 +2851,8 @@ class Diaspora
                                        'deleted' => true,
                                        'title' => '',
                                        'body' => '',
-                                       'edited' => datetime_convert(),
-                                       'changed' => datetime_convert()],
+                                       'edited' => DateTimeFormat::utcNow(),
+                                       'changed' => DateTimeFormat::utcNow()],
                                ['id' => $item["id"]]
                        );
 
@@ -2929,7 +2929,7 @@ class Diaspora
        {
                $author = notags(unxmlify($data->author));
                $guid = notags(unxmlify($data->guid));
-               $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at)));
+               $created_at = DateTimeFormat::utc(notags(unxmlify($data->created_at)));
                $public = notags(unxmlify($data->public));
                $text = unxmlify($data->text);
                $provider_display_name = notags(unxmlify($data->provider_display_name));
@@ -3592,7 +3592,7 @@ class Diaspora
                        $eventdata['guid'] = $event['guid'];
                }
 
-               $mask = 'Y-m-d\TH:i:s\Z';
+               $mask = DateTimeFormat::ATOM;
 
                /// @todo - establish "all day" events in Friendica
                $eventdata["all_day"] = "false";
@@ -3606,10 +3606,10 @@ class Diaspora
                }
 
                if ($event['start']) {
-                       $eventdata['start'] = datetime_convert($eventdata['timezone'], "UTC", $event['start'], $mask);
+                       $eventdata['start'] = DateTimeFormat::convert($event['start'], "UTC", $eventdata['timezone'], $mask);
                }
                if ($event['finish'] && !$event['nofinish']) {
-                       $eventdata['end'] = datetime_convert($eventdata['timezone'], "UTC", $event['finish'], $mask);
+                       $eventdata['end'] = DateTimeFormat::convert($event['finish'], "UTC", $eventdata['timezone'], $mask);
                }
                if ($event['summary']) {
                        $eventdata['summary'] = html_entity_decode(bb2diaspora($event['summary']));
@@ -3651,7 +3651,7 @@ class Diaspora
 
                $public = (($item["private"]) ? "false" : "true");
 
-               $created = datetime_convert("UTC", "UTC", $item["created"], 'Y-m-d\TH:i:s\Z');
+               $created = DateTimeFormat::utc($item["created"], DateTimeFormat::ATOM);
 
                // Detect a share element and do a reshare
                if (!$item['private'] && ($ret = self::isReshare($item["body"]))) {
@@ -3854,7 +3854,7 @@ class Diaspora
                $parent = $p[0];
 
                $text = html_entity_decode(bb2diaspora($item["body"]));
-               $created = datetime_convert("UTC", "UTC", $item["created"], 'Y-m-d\TH:i:s\Z');
+               $created = DateTimeFormat::utc($item["created"], DateTimeFormat::ATOM);
 
                $comment = ["author" => self::myHandle($owner),
                                "guid" => $item["guid"],
@@ -4085,12 +4085,12 @@ class Diaspora
                        "author" => $cnv["creator"],
                        "guid" => $cnv["guid"],
                        "subject" => $cnv["subject"],
-                       "created_at" => datetime_convert("UTC", "UTC", $cnv['created'], 'Y-m-d\TH:i:s\Z'),
+                       "created_at" => DateTimeFormat::utc($cnv['created'], DateTimeFormat::ATOM),
                        "participants" => $cnv["recips"]
                ];
 
                $body = bb2diaspora($item["body"]);
-               $created = datetime_convert("UTC", "UTC", $item["created"], 'Y-m-d\TH:i:s\Z');
+               $created = DateTimeFormat::utc($item["created"], DateTimeFormat::ATOM);
 
                $msg = [
                        "author" => $myaddr,
@@ -4108,7 +4108,7 @@ class Diaspora
                                        "author" => $cnv["creator"],
                                        "guid" => $cnv["guid"],
                                        "subject" => $cnv["subject"],
-                                       "created_at" => datetime_convert("UTC", "UTC", $cnv['created'], 'Y-m-d\TH:i:s\Z'),
+                                       "created_at" => DateTimeFormat::utc($cnv['created'], DateTimeFormat::ATOM),
                                        "participants" => $cnv["recips"],
                                        "message" => $msg];
 
@@ -4216,7 +4216,7 @@ class Diaspora
                                if ($year < 1004) {
                                        $year = 1004;
                                }
-                               $dob = datetime_convert('UTC', 'UTC', $year . '-' . $month . '-'. $day, 'Y-m-d');
+                               $dob = DateTimeFormat::utc($year . '-' . $month . '-'. $day, 'Y-m-d');
                        }
 
                        $about = $profile['about'];
index 3c0f3627be8ca8a805049dee176ee356e411ac9a..e4894cf5476f1c5ec50b8a730b0ce5f84f1b9f76 100644 (file)
@@ -4,7 +4,6 @@
  */
 namespace Friendica\Protocol;
 
-use Friendica\App;
 use Friendica\Content\Text\BBCode;
 use Friendica\Core\Cache;
 use Friendica\Core\Config;
@@ -12,11 +11,12 @@ use Friendica\Core\L10n;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
 use Friendica\Model\Contact;
-use Friendica\Model\GContact;
 use Friendica\Model\Conversation;
+use Friendica\Model\GContact;
 use Friendica\Model\Item;
 use Friendica\Network\Probe;
 use Friendica\Object\Image;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Lock;
 use Friendica\Util\Network;
 use Friendica\Util\XML;
@@ -199,7 +199,7 @@ class OStatus
                                $contact["location"] = $value;
                        }
 
-                       $contact['name-date'] = datetime_convert();
+                       $contact['name-date'] = DateTimeFormat::utcNow();
 
                        dba::update('contact', $contact, ['id' => $contact["id"]], $current);
 
@@ -220,7 +220,7 @@ class OStatus
                                                'nurl' => normalise_link($author["author-link"]),
                                                'nick' => $contact["nick"], 'alias' => $contact["alias"],
                                                'about' => $contact["about"], 'location' => $contact["location"],
-                                               'success_update' => datetime_convert(), 'last-update' => datetime_convert()];
+                                               'success_update' => DateTimeFormat::utcNow(), 'last-update' => DateTimeFormat::utcNow()];
 
                                dba::update('contact', $fields, ['id' => $cid], $old_contact);
 
@@ -558,7 +558,7 @@ class OStatus
                dba::update(
                        'item',
                        ['deleted' => true, 'title' => '', 'body' => '',
-                                       'edited' => datetime_convert(), 'changed' => datetime_convert()],
+                                       'edited' => DateTimeFormat::utcNow(), 'changed' => DateTimeFormat::utcNow()],
                        ['id' => $deleted["id"]]
                );
 
@@ -1273,7 +1273,7 @@ class OStatus
                XML::addElement($doc, $root, "title", $title);
                XML::addElement($doc, $root, "subtitle", sprintf("Updates from %s on %s", $owner["name"], $a->config["sitename"]));
                XML::addElement($doc, $root, "logo", $owner["photo"]);
-               XML::addElement($doc, $root, "updated", datetime_convert("UTC", "UTC", "now", ATOM_TIME));
+               XML::addElement($doc, $root, "updated", DateTimeFormat::utcNow(DateTimeFormat::ATOM));
 
                $author = self::addAuthor($doc, $owner);
                $root->appendChild($author);
@@ -1539,7 +1539,7 @@ class OStatus
                XML::addElement($doc, $source, "link", "", ["rel" => "alternate", "type" => "text/html", "href" => $contact["alias"]]);
                XML::addElement($doc, $source, "link", "", ["rel" => "self", "type" => "application/atom+xml", "href" => $contact["poll"]]);
                XML::addElement($doc, $source, "icon", $contact["photo"]);
-               XML::addElement($doc, $source, "updated", datetime_convert("UTC", "UTC", $contact["success_update"]."+00:00", ATOM_TIME));
+               XML::addElement($doc, $source, "updated", DateTimeFormat::utc($contact["success_update"]."+00:00", DateTimeFormat::ATOM));
 
                return $source;
        }
@@ -1923,8 +1923,8 @@ class OStatus
 
                XML::addElement($doc, $entry, "activity:verb", $verb);
 
-               XML::addElement($doc, $entry, "published", datetime_convert("UTC", "UTC", $item["created"]."+00:00", ATOM_TIME));
-               XML::addElement($doc, $entry, "updated", datetime_convert("UTC", "UTC", $item["edited"]."+00:00", ATOM_TIME));
+               XML::addElement($doc, $entry, "published", DateTimeFormat::utc($item["created"]."+00:00", DateTimeFormat::ATOM));
+               XML::addElement($doc, $entry, "updated", DateTimeFormat::utc($item["edited"]."+00:00", DateTimeFormat::ATOM));
        }
 
        /**
@@ -2127,7 +2127,7 @@ class OStatus
                        $last_update = 'now -30 days';
                }
 
-               $check_date = datetime_convert('UTC', 'UTC', $last_update, 'Y-m-d H:i:s');
+               $check_date = DateTimeFormat::utc($last_update);
                $authorid = Contact::getIdForURL($owner["url"], 0);
 
                $sql_extra = '';
index e70e67366cf8333beae39f09a6efe522dcb50351..7f351ed059226f980e01462828753c38e0beed64 100644 (file)
@@ -15,6 +15,7 @@ use Friendica\Database\DBM;
 use Friendica\Model\GContact;
 use Friendica\Model\Profile;
 use Friendica\Network\Probe;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
 use dba;
 use DOMDocument;
@@ -143,7 +144,7 @@ class PortableContact
                        }
 
                        if (isset($entry->updated)) {
-                               $updated = date("Y-m-d H:i:s", strtotime($entry->updated));
+                               $updated = date(DateTimeFormat::MYSQL, strtotime($entry->updated));
                        }
 
                        if (isset($entry->network)) {
@@ -314,7 +315,7 @@ class PortableContact
                $contact = ["url" => $profile];
 
                if ($gcontacts[0]["created"] <= NULL_DATE) {
-                       $contact['created'] = datetime_convert();
+                       $contact['created'] = DateTimeFormat::utcNow();
                }
 
                if ($force) {
@@ -337,7 +338,7 @@ class PortableContact
                if ($server_url != "") {
                        if (!self::checkServer($server_url, $gcontacts[0]["network"], $force)) {
                                if ($force) {
-                                       $fields = ['last_failure' => datetime_convert()];
+                                       $fields = ['last_failure' => DateTimeFormat::utcNow()];
                                        dba::update('gcontact', $fields, ['nurl' => normalise_link($profile)]);
                                }
 
@@ -411,14 +412,14 @@ class PortableContact
 
                                                // Set the date of the last contact
                                                /// @todo By now the function "update_gcontact" doesn't work with this field
-                                               //$contact["last_contact"] = datetime_convert();
+                                               //$contact["last_contact"] = DateTimeFormat::utcNow();
 
                                                $contact = array_merge($contact, $noscrape);
 
                                                GContact::update($contact);
 
                                                if (trim($noscrape["updated"]) != "") {
-                                                       $fields = ['last_contact' => datetime_convert()];
+                                                       $fields = ['last_contact' => DateTimeFormat::utcNow()];
                                                        dba::update('gcontact', $fields, ['nurl' => normalise_link($profile)]);
 
                                                        logger("Profile ".$profile." was last updated at ".$noscrape["updated"]." (noscrape)", LOGGER_DEBUG);
@@ -467,7 +468,7 @@ class PortableContact
                }
 
                if (($data["poll"] == "") || (in_array($data["network"], [NETWORK_FEED, NETWORK_PHANTOM]))) {
-                       $fields = ['last_failure' => datetime_convert()];
+                       $fields = ['last_failure' => DateTimeFormat::utcNow()];
                        dba::update('gcontact', $fields, ['nurl' => normalise_link($profile)]);
 
                        logger("Profile ".$profile." wasn't reachable (profile)", LOGGER_DEBUG);
@@ -483,7 +484,7 @@ class PortableContact
                $feedret = Network::curl($data["poll"]);
 
                if (!$feedret["success"]) {
-                       $fields = ['last_failure' => datetime_convert()];
+                       $fields = ['last_failure' => DateTimeFormat::utcNow()];
                        dba::update('gcontact', $fields, ['nurl' => normalise_link($profile)]);
 
                        logger("Profile ".$profile." wasn't reachable (no feed)", LOGGER_DEBUG);
@@ -532,7 +533,7 @@ class PortableContact
 
        public static function updateNeeded($created, $updated, $last_failure, $last_contact)
        {
-               $now = strtotime(datetime_convert());
+               $now = strtotime(DateTimeFormat::utcNow());
 
                if ($updated > $last_contact) {
                        $contact_time = strtotime($updated);
@@ -921,7 +922,7 @@ class PortableContact
                $gserver = dba::selectFirst('gserver', [], ['nurl' => normalise_link($server_url)]);
                if (DBM::is_result($gserver)) {
                        if ($gserver["created"] <= NULL_DATE) {
-                               $fields = ['created' => datetime_convert()];
+                               $fields = ['created' => DateTimeFormat::utcNow()];
                                $condition = ['nurl' => normalise_link($server_url)];
                                dba::update('gserver', $fields, $condition);
                        }
@@ -968,7 +969,7 @@ class PortableContact
                // Mastodon uses the "@" for user profiles.
                // But this can be misunderstood.
                if (parse_url($server_url, PHP_URL_USER) != '') {
-                       dba::update('gserver', ['last_failure' => datetime_convert()], ['nurl' => normalise_link($server_url)]);
+                       dba::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => normalise_link($server_url)]);
                        return false;
                }
 
@@ -984,7 +985,7 @@ class PortableContact
                if (DBM::is_result($gserver) && ($orig_server_url == $server_url) &&
                        ($serverret['errno'] == CURLE_OPERATION_TIMEDOUT)) {
                        logger("Connection to server ".$server_url." timed out.", LOGGER_DEBUG);
-                       dba::update('gserver', ['last_failure' => datetime_convert()], ['nurl' => normalise_link($server_url)]);
+                       dba::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => normalise_link($server_url)]);
                        return false;
                }
 
@@ -999,7 +1000,7 @@ class PortableContact
                        // Quit if there is a timeout
                        if ($serverret['errno'] == CURLE_OPERATION_TIMEDOUT) {
                                logger("Connection to server ".$server_url." timed out.", LOGGER_DEBUG);
-                               dba::update('gserver', ['last_failure' => datetime_convert()], ['nurl' => normalise_link($server_url)]);
+                               dba::update('gserver', ['last_failure' => DateTimeFormat::utcNow()], ['nurl' => normalise_link($server_url)]);
                                return false;
                        }
 
@@ -1331,9 +1332,9 @@ class PortableContact
 
                if ($failure) {
                        $last_contact = $orig_last_contact;
-                       $last_failure = datetime_convert();
+                       $last_failure = DateTimeFormat::utcNow();
                } else {
-                       $last_contact = datetime_convert();
+                       $last_contact = DateTimeFormat::utcNow();
                        $last_failure = $orig_last_failure;
                }
 
@@ -1361,7 +1362,7 @@ class PortableContact
                        dba::update('gserver', $fields, ['nurl' => normalise_link($server_url)]);
                } elseif (!$failure) {
                        $fields['nurl'] = normalise_link($server_url);
-                       $fields['created'] = datetime_convert();
+                       $fields['created'] = DateTimeFormat::utcNow();
                        dba::insert('gserver', $fields);
                }
                logger("End discovery for server " . $server_url, LOGGER_DEBUG);
@@ -1506,7 +1507,7 @@ class PortableContact
                                        $timeframe = 30;
                                }
 
-                               $updatedSince = date("Y-m-d H:i:s", time() - $timeframe * 86400);
+                               $updatedSince = date(DateTimeFormat::MYSQL, time() - $timeframe * 86400);
 
                                // Fetch all global contacts from the other server (Not working with Redmatrix and Friendica versions before 3.3)
                                $url = $server["poco"]."/@global?updatedSince=".$updatedSince."&fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation";
@@ -1525,7 +1526,7 @@ class PortableContact
                                }
                        }
 
-                       $fields = ['last_poco_query' => datetime_convert()];
+                       $fields = ['last_poco_query' => DateTimeFormat::utcNow()];
                        dba::update('gserver', $fields, ['nurl' => $server["nurl"]]);
 
                        return true;
@@ -1534,7 +1535,7 @@ class PortableContact
                        self::checkServer($server["url"], $server["network"], true);
 
                        // If we couldn't reach the server, we will try it some time later
-                       $fields = ['last_poco_query' => datetime_convert()];
+                       $fields = ['last_poco_query' => DateTimeFormat::utcNow()];
                        dba::update('gserver', $fields, ['nurl' => $server["nurl"]]);
 
                        return false;
@@ -1560,7 +1561,7 @@ class PortableContact
                        foreach ($r as $server) {
                                if (!self::checkServer($server["url"], $server["network"])) {
                                        // The server is not reachable? Okay, then we will try it later
-                                       $fields = ['last_poco_query' => datetime_convert()];
+                                       $fields = ['last_poco_query' => DateTimeFormat::utcNow()];
                                        dba::update('gserver', $fields, ['nurl' => $server["nurl"]]);
                                        continue;
                                }
@@ -1653,7 +1654,7 @@ class PortableContact
                        }
 
                        if (isset($entry->updated)) {
-                               $updated = date("Y-m-d H:i:s", strtotime($entry->updated));
+                               $updated = date(DateTimeFormat::MYSQL, strtotime($entry->updated));
                        }
 
                        if (isset($entry->network)) {
diff --git a/src/Util/DateTimeFormat.php b/src/Util/DateTimeFormat.php
new file mode 100644 (file)
index 0000000..10810da
--- /dev/null
@@ -0,0 +1,139 @@
+<?php
+
+/**
+ * @file src/Util/DateTimeFormat.php
+ */
+
+namespace Friendica\Util;
+
+use DateTime;
+use DateTimeZone;
+use Exception;
+
+/**
+ * @brief Temporal class
+ */
+class DateTimeFormat
+{
+       const ATOM = 'Y-m-d\TH:i:s\Z';
+       const MYSQL = 'Y-m-d H:i:s';
+
+       /**
+        * convert() shorthand for UTC.
+        *
+        * @param string $time   A date/time string
+        * @param string $format DateTime format string or Temporal constant
+        * @return string
+        */
+       public static function utc($time, $format = self::MYSQL)
+       {
+               return self::convert($time, 'UTC', 'UTC', $format);
+       }
+
+       /**
+        * convert() shorthand for local.
+        *
+        * @param string $time   A date/time string
+        * @param string $format DateTime format string or Temporal constant
+        * @return string
+        */
+       public static function local($time, $format = self::MYSQL)
+       {
+               return self::convert($time, date_default_timezone_get(), 'UTC', $format);
+       }
+
+       /**
+        * convert() shorthand for timezoned now.
+        *
+        * @param string $format DateTime format string or Temporal constant
+        * @return string
+        */
+       public static function timezoneNow($timezone, $format = self::MYSQL)
+       {
+               return self::convert('now', $timezone, 'UTC', $format);
+       }
+
+       /**
+        * convert() shorthand for local now.
+        *
+        * @param string $format DateTime format string or Temporal constant
+        * @return string
+        */
+       public static function localNow($format = self::MYSQL)
+       {
+               return self::local('now', $format);
+       }
+
+       /**
+        * convert() shorthand for UTC now.
+        *
+        * @param string $format DateTime format string or Temporal constant
+        * @return string
+        */
+       public static function utcNow($format = self::MYSQL)
+       {
+               return self::utc('now', $format);
+       }
+
+       /**
+        * @brief General purpose date parse/convert/format function.
+        *
+        * @param string $s       Some parseable date/time string
+        * @param string $tz_to   Destination timezone
+        * @param string $tz_from Source timezone
+        * @param string $format  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
+        */
+       public static function convert($s = 'now', $tz_to = 'UTC', $tz_from = 'UTC', $format = self::MYSQL)
+       {
+               // Defaults to UTC if nothing is set, but throws an exception if set to empty string.
+               // Provide some sane defaults regardless.
+               if ($from === '') {
+                       $from = 'UTC';
+               }
+
+               if ($to === '') {
+                       $to = 'UTC';
+               }
+
+               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.
+                */
+               if (substr($s, 0, 10) <= '0001-01-01') {
+                       $d = new DateTime($s . ' + 32 days', new DateTimeZone('UTC'));
+                       return str_replace('1', '0', $d->format($format));
+               }
+
+               try {
+                       $from_obj = new DateTimeZone($tz_from);
+               } catch (Exception $e) {
+                       $from_obj = new DateTimeZone('UTC');
+               }
+
+               try {
+                       $d = new DateTime($s, $from_obj);
+               } catch (Exception $e) {
+                       logger('datetime_convert: exception: ' . $e->getMessage());
+                       $d = new DateTime('now', $from_obj);
+               }
+
+               try {
+                       $to_obj = new DateTimeZone($tz_to);
+               } catch (Exception $e) {
+                       $to_obj = new DateTimeZone('UTC');
+               }
+
+               $d->setTimeZone($to_obj);
+
+               return $d->format($format);
+       }
+}
index 868bd7ede8b621d41c38d45f1821255908a613f8..e8094959d6b348b9c9c51e4bb5c855084d8a12a8 100644 (file)
@@ -73,7 +73,8 @@ class ParseUrl
                        [
                                'url' => normalise_link($url), 'guessing' => !$no_guessing,
                                'oembed' => $do_oembed, 'content' => serialize($data),
-                               'created' => datetime_convert()],
+                               'created' => DateTimeFormat::utcNow()
+                       ],
                        true
                );
 
diff --git a/src/Util/Temporal.php b/src/Util/Temporal.php
new file mode 100644 (file)
index 0000000..e200d90
--- /dev/null
@@ -0,0 +1,498 @@
+<?php
+
+/**
+ * @file src/Util/Temporal.php
+ */
+
+namespace Friendica\Util;
+
+use DateTime;
+use DateTimeZone;
+use Friendica\Core\Config;
+use Friendica\Core\L10n;
+use Friendica\Core\PConfig;
+
+require_once 'boot.php';
+require_once 'include/text.php';
+
+/**
+ * @brief Temporal class
+ */
+class Temporal
+{
+       /**
+        * @brief Two-level sort for timezones.
+        *
+        * @param string $a
+        * @param string $b
+        * @return int
+        */
+       private static function timezoneCompareCallback($a, $b)
+       {
+               if (strstr($a, '/') && strstr($b, '/')) {
+                       if (L10n::t($a) == L10n::t($b)) {
+                               return 0;
+                       }
+                       return (L10n::t($a) < L10n::t($b)) ? -1 : 1;
+               }
+
+               if (strstr($a, '/')) {
+                       return -1;
+               } elseif (strstr($b, '/')) {
+                       return 1;
+               } elseif (L10n::t($a) == L10n::t($b)) {
+                       return 0;
+               }
+
+               return (L10n::t($a) < L10n::t($b)) ? -1 : 1;
+       }
+
+       /**
+        * @brief Emit a timezone selector grouped (primarily) by continent
+        *
+        * @param string $current Timezone
+        * @return string Parsed HTML output
+        */
+       public static function getTimezoneSelect($current = 'America/Los_Angeles')
+       {
+               $timezone_identifiers = DateTimeZone::listIdentifiers();
+
+               $o = '<select id="timezone_select" name="timezone">';
+
+               usort($timezone_identifiers, [self, 'timezoneCompareCallback']);
+               $continent = '';
+               foreach ($timezone_identifiers as $value) {
+                       $ex = explode("/", $value);
+                       if (count($ex) > 1) {
+                               if ($ex[0] != $continent) {
+                                       if ($continent != '') {
+                                               $o .= '</optgroup>';
+                                       }
+                                       $continent = $ex[0];
+                                       $o .= '<optgroup label="' . L10n::t($continent) . '">';
+                               }
+                               if (count($ex) > 2) {
+                                       $city = substr($value, strpos($value, '/') + 1);
+                               } else {
+                                       $city = $ex[1];
+                               }
+                       } else {
+                               $city = $ex[0];
+                               if ($continent != L10n::t('Miscellaneous')) {
+                                       $o .= '</optgroup>';
+                                       $continent = L10n::t('Miscellaneous');
+                                       $o .= '<optgroup label="' . L10n::t($continent) . '">';
+                               }
+                       }
+                       $city = str_replace('_', ' ', L10n::t($city));
+                       $selected = (($value == $current) ? " selected=\"selected\" " : "");
+                       $o .= "<option value=\"$value\" $selected >$city</option>";
+               }
+               $o .= '</optgroup></select>';
+               return $o;
+       }
+
+       /**
+        * @brief Generating a Timezone selector
+        *
+        * Return a select using 'field_select_raw' template, with timezones
+        * grouped (primarily) by continent
+        * arguments follow convention 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
+        */
+       public static function getTimezoneField($name = 'timezone', $label = '', $current = 'America/Los_Angeles', $help = '')
+       {
+               $options = self::getTimezoneSelect($current);
+               $options = str_replace('<select id="timezone_select" name="timezone">', '', $options);
+               $options = str_replace('</select>', '', $options);
+
+               $tpl = get_markup_template('field_select_raw.tpl');
+               return replace_macros($tpl, [
+                       '$field' => [$name, $label, $current, $help, $options],
+               ]);
+       }
+
+       /**
+        * @brief Wrapper for date selector, tailored for use in birthday fields.
+        *
+        * @param string $dob Date of Birth
+        * @return string Formatted HTML
+        */
+       public static function getDateofBirthField($dob)
+       {
+               list($year, $month, $day) = sscanf($dob, '%4d-%2d-%2d');
+
+               if ($dob < '0000-01-01') {
+                       $value = '';
+               } else {
+                       $value = DateTimeFormat::utc(($year > 1000) ? $dob : '1000-' . $month . '-' . $day, 'Y-m-d');
+               }
+
+               $age = (intval($value) ? age($value, $a->user["timezone"], $a->user["timezone"]) : "");
+
+               $tpl = get_markup_template("field_input.tpl");
+               $o = replace_macros($tpl,
+                       [
+                       '$field' => [
+                               'dob',
+                               L10n::t('Birthday:'),
+                               $value,
+                               intval($age) > 0 ? L10n::t('Age: ') . $age : "",
+                               '',
+                               'placeholder="' . L10n::t('YYYY-MM-DD or MM-DD') . '"'
+                       ]
+               ]);
+
+               return $o;
+       }
+
+       /**
+        * @brief Returns a date selector
+        *
+        * @param string $min     Unix timestamp of minimum date
+        * @param string $max     Unix timestap of maximum date
+        * @param string $default Unix timestamp of default date
+        * @param string $id      ID and name of datetimepicker (defaults to "datetimepicker")
+        *
+        * @return string Parsed HTML output.
+        */
+       public static function getDateField($min, $max, $default, $id = 'datepicker')
+       {
+               return datetimesel($min, $max, $default, '', $id, true, false, '', '');
+       }
+
+       /**
+        * @brief Returns a time selector
+        *
+        * @param string $h  Already selected hour
+        * @param string $m  Already selected minute
+        * @param string $id ID and name of datetimepicker (defaults to "timepicker")
+        *
+        * @return string Parsed HTML output.
+        */
+       public static function getTimeField($h, $m, $id = 'timepicker')
+       {
+               return datetimesel(new DateTime(), new DateTime(), new DateTime("$h:$m"), '', $id, false, true);
+       }
+
+       /**
+        * @brief Returns a datetime selector.
+        *
+        * @param DateTime $minDate     Minimum date
+        * @param DateTime $maxDate     Maximum date
+        * @param DateTime $defaultDate Default date
+        * @param string   $id          Id and name of datetimepicker (defaults to "datetimepicker")
+        * @param bool     $pickdate    true to show date picker (default)
+        * @param bool     $picktime    true to show time picker (default)
+        * @param string   $minfrom     set minimum date from picker with id $minfrom (none by default)
+        * @param string   $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.
+        */
+       public static function getDateTimeField(
+               DateTime $minDate,
+               DateTime $maxDate,
+               DateTime $defaultDate,
+               $label,
+               $id       = 'datetimepicker',
+               $pickdate = true,
+               $picktime = true,
+               $minfrom  = '',
+               $maxfrom  = '',
+               $required = false)
+       {
+               // First day of the week (0 = Sunday)
+               $firstDay = PConfig::get(local_user(), 'system', 'first_day_of_week', 0);
+
+               $lang = substr(L10n::getBrowserLanguage(), 0, 2);
+
+               // Check if the detected language is supported by the picker
+               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';
+               }
+
+               $input_text = $defaultDate ? date($dateformat, $defaultDate->getTimestamp()) : '';
+
+               $readable_format = str_replace(['Y', 'm', 'd', 'H', 'i'], ['yyyy', 'mm', 'dd', 'HH', 'MM'], $dateformat);
+
+               $tpl = get_markup_template('field_datetime.tpl');
+               $o .= replace_macros($tpl, [
+                       '$field' => [
+                               $id,
+                               $label,
+                               $input_text,
+                               '',
+                               $required ? '*' : '',
+                               'placeholder="' . $readable_format . '"'
+                       ],
+                       '$datetimepicker' => [
+                               'minDate' => $minDate,
+                               'maxDate' => $maxDate,
+                               'defaultDate' => $defaultDate,
+                               'dateformat' => $dateformat,
+                               'firstDay' => $firstDay,
+                               'lang' => $lang,
+                               'minfrom' => $minfrom,
+                               'maxfrom' => $maxfrom,
+                       ]
+               ]);
+
+               return $o;
+       }
+
+       /**
+        * @brief Returns a relative date string.
+        *
+        * Implements "3 seconds ago" etc.
+        * Based on $posted_date, (UTC).
+        * Results relative to current timezone.
+        * Limited to range of timestamps.
+        *
+        * @param string $posted_date MySQL-formatted date string (YYYY-MM-DD HH:MM:SS)
+        * @param string $format (optional) Parsed with sprintf()
+        *    <tt>%1$d %2$s ago</tt>, e.g. 22 hours ago, 1 minute ago
+        *
+        * @return string with relative date
+        */
+       public static function getRelativeDate($posted_date, $format = null)
+       {
+               $localtime = $posted_date . ' UTC';
+
+               $abs = strtotime($localtime);
+
+               if (is_null($posted_date) || $posted_date <= NULL_DATE || $abs === false) {
+                       return L10n::t('never');
+               }
+
+               $etime = time() - $abs;
+
+               if ($etime < 1) {
+                       return L10n::t('less than a second ago');
+               }
+
+               $a = [12 * 30 * 24 * 60 * 60 => [L10n::t('year'), L10n::t('years')],
+                       30 * 24 * 60 * 60 => [L10n::t('month'), L10n::t('months')],
+                       7 * 24 * 60 * 60 => [L10n::t('week'), L10n::t('weeks')],
+                       24 * 60 * 60 => [L10n::t('day'), L10n::t('days')],
+                       60 * 60 => [L10n::t('hour'), L10n::t('hours')],
+                       60 => [L10n::t('minute'), L10n::t('minutes')],
+                       1 => [L10n::t('second'), L10n::t('seconds')]
+               ];
+
+               foreach ($a as $secs => $str) {
+                       $d = $etime / $secs;
+                       if ($d >= 1) {
+                               $r = round($d);
+                               // translators - e.g. 22 hours ago, 1 minute ago
+                               if (!$format) {
+                                       $format = L10n::t('%1$d %2$s ago');
+                               }
+
+                               return sprintf($format, $r, (($r == 1) ? $str[0] : $str[1]));
+                       }
+               }
+       }
+
+       /**
+        * @brief Returns timezone correct age in years.
+        *
+        * Returns the age in years, given a date of birth, the timezone of the person
+        * whose date of birth is provided, and the timezone of the person viewing the
+        * result.
+        *
+        * Why? Bear with me. Let's say I live in Mittagong, Australia, and my birthday
+        * is on New Year's. You live in San Bruno, California.
+        * When exactly are you going to see my age increase?
+        *
+        * A: 5:00 AM Dec 31 San Bruno time. That's precisely when I start celebrating
+        * and become a year older. If you wish me happy birthday on January 1
+        * (San Bruno time), you'll be a day late.
+        *
+        * @param string $dob Date of Birth
+        * @param string $owner_tz (optional) Timezone of the person of interest
+        * @param string $viewer_tz (optional) Timezone of the person viewing
+        *
+        * @return int Age in years
+        */
+       public static function getAgeByTimezone($dob, $owner_tz = '', $viewer_tz = '')
+       {
+               if (!intval($dob)) {
+                       return 0;
+               }
+               if (!$owner_tz) {
+                       $owner_tz = date_default_timezone_get();
+               }
+               if (!$viewer_tz) {
+                       $viewer_tz = date_default_timezone_get();
+               }
+
+               $birthdate = DateTimeFormat::convert($dob . ' 00:00:00+00:00', $owner_tz, 'UTC', 'Y-m-d');
+               list($year, $month, $day) = explode("-", $birthdate);
+               $year_diff  = DateTimeFormat::timezoneNow($viewer_tz, 'Y') - $year;
+               $curr_month = DateTimeFormat::timezoneNow($viewer_tz, 'm');
+               $curr_day   = DateTimeFormat::timezoneNow($viewer_tz, 'd');
+
+               if (($curr_month < $month) || (($curr_month == $month) && ($curr_day < $day))) {
+                       $year_diff--;
+               }
+
+               return $year_diff;
+       }
+
+       /**
+        * @brief Get days of a month in a given year.
+        *
+        * Returns number of days in the month of the given year.
+        * $m = 1 is 'January' to match human usage.
+        *
+        * @param int $y Year
+        * @param int $m Month (1=January, 12=December)
+        *
+        * @return int Number of days in the given month
+        */
+       public static function getDaysInMonth($y, $m)
+       {
+               return date('t', mktime(0, 0, 0, $m, 1, $y));
+       }
+
+       /**
+        * @brief Returns the first day in month for a given month, year.
+        *
+        * Months start at 1.
+        *
+        * @param int $y Year
+        * @param int $m Month (1=January, 12=December)
+        *
+        * @return string day 0 = Sunday through 6 = Saturday
+        */
+       public static function getFirstDayInMonth($y, $m)
+       {
+               $d = sprintf('%04d-%02d-01 00:00', intval($y), intval($m));
+
+               return DateTimeFormat::utc($d, 'w');
+       }
+
+       /**
+        * @brief Output a calendar for the given month, year.
+        *
+        * If $links are provided (array), e.g. $links[12] => 'http://mylink' ,
+        * date 12 will be linked appropriately. Today's date is also noted by
+        * altering td class.
+        * Months count from 1.
+        *
+        * @param int    $y Year
+        * @param int    $m Month
+        * @param array  $links (default null)
+        * @param string $class
+        *
+        * @return string
+        *
+        * @todo Provide (prev, next) links, define class variations for different size calendars
+        */
+       public static function getCalendarTable($y = 0, $m = 0, $links = null, $class = '')
+       {
+               // month table - start at 1 to match human usage.
+               $mtab = [' ',
+                       'January', 'February', 'March',
+                       'April', 'May', 'June',
+                       'July', 'August', 'September',
+                       'October', 'November', 'December'
+               ];
+
+               $thisyear = DateTimeFormat::localNow('Y');
+               $thismonth = DateTimeFormat::localNow('m');
+               if (!$y) {
+                       $y = $thisyear;
+               }
+
+               if (!$m) {
+                       $m = intval($thismonth);
+               }
+
+               $dn = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
+               $f = get_first_dim($y, $m);
+               $l = get_dim($y, $m);
+               $d = 1;
+               $dow = 0;
+               $started = false;
+
+               if (($y == $thisyear) && ($m == $thismonth)) {
+                       $tddate = intval(DateTimeFormat::localNow('j'));
+               }
+
+               $str_month = day_translate($mtab[$m]);
+               $o = '<table class="calendar' . $class . '">';
+               $o .= "<caption>$str_month $y</caption><tr>";
+               for ($a = 0; $a < 7; $a ++) {
+                       $o .= '<th>' . mb_substr(day_translate($dn[$a]), 0, 3, 'UTF-8') . '</th>';
+               }
+
+               $o .= '</tr><tr>';
+
+               while ($d <= $l) {
+                       if (($dow == $f) && (!$started)) {
+                               $started = true;
+                       }
+
+                       $today = (((isset($tddate)) && ($tddate == $d)) ? "class=\"today\" " : '');
+                       $o .= "<td $today>";
+                       $day = str_replace(' ', '&nbsp;', sprintf('%2.2d', $d));
+                       if ($started) {
+                               if (x($links, $d) !== false) {
+                                       $o .= "<a href=\"{$links[$d]}\">$day</a>";
+                               } else {
+                                       $o .= $day;
+                               }
+
+                               $d ++;
+                       } else {
+                               $o .= '&nbsp;';
+                       }
+
+                       $o .= '</td>';
+                       $dow ++;
+                       if (($dow == 7) && ($d <= $l)) {
+                               $dow = 0;
+                               $o .= '</tr><tr>';
+                       }
+               }
+
+               if ($dow) {
+                       for ($a = $dow; $a < 7; $a ++) {
+                               $o .= '<td>&nbsp;</td>';
+                       }
+               }
+
+               $o .= '</tr></table>' . "\r\n";
+
+               return $o;
+       }
+}
index 2c855d569f74390218a5f2b8c7f59c277494c7fe..7c8e5bc0f4ace03b5ad4fd363e4aba049f36a607 100644 (file)
@@ -8,6 +8,7 @@ use Friendica\Core\Addon;
 use Friendica\Core\Config;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
+use Friendica\Util\DateTimeFormat;
 use dba;
 
 require_once 'include/dba.php';
@@ -70,7 +71,7 @@ Class Cron {
 
                // once daily run birthday_updates and then expire in background
                $d1 = Config::get('system', 'last_expire_day');
-               $d2 = intval(datetime_convert('UTC', 'UTC', 'now', 'd'));
+               $d2 = intval(DateTimeFormat::utcNow('d'));
 
                if ($d2 != intval($d1)) {
 
@@ -141,7 +142,7 @@ Class Cron {
 
                Addon::reload();
 
-               $d = datetime_convert();
+               $d = DateTimeFormat::utcNow();
 
                // Only poll from those with suitable relationships,
                // and which have a polling address and ignore Diaspora since
@@ -217,33 +218,33 @@ Class Cron {
                                 */
                                switch ($contact['priority']) {
                                        case 5:
-                                               if (datetime_convert('UTC', 'UTC', 'now') > datetime_convert('UTC', 'UTC', $t . " + 1 month")) {
+                                               if (DateTimeFormat::utcNow() > DateTimeFormat::utc($t . " + 1 month")) {
                                                        $update = true;
                                                }
                                                break;
                                        case 4:
-                                               if (datetime_convert('UTC', 'UTC', 'now') > datetime_convert('UTC', 'UTC', $t . " + 1 week")) {
+                                               if (DateTimeFormat::utcNow() > DateTimeFormat::utc($t . " + 1 week")) {
                                                        $update = true;
                                                }
                                                break;
                                        case 3:
-                                               if (datetime_convert('UTC', 'UTC', 'now') > datetime_convert('UTC', 'UTC', $t . " + 1 day")) {
+                                               if (DateTimeFormat::utcNow() > DateTimeFormat::utc($t . " + 1 day")) {
                                                        $update = true;
                                                }
                                                break;
                                        case 2:
-                                               if (datetime_convert('UTC', 'UTC', 'now') > datetime_convert('UTC', 'UTC', $t . " + 12 hour")) {
+                                               if (DateTimeFormat::utcNow() > DateTimeFormat::utc($t . " + 12 hour")) {
                                                        $update = true;
                                                }
                                                break;
                                        case 1:
-                                               if (datetime_convert('UTC', 'UTC', 'now') > datetime_convert('UTC', 'UTC', $t . " + 1 hour")) {
+                                               if (DateTimeFormat::utcNow() > DateTimeFormat::utc($t . " + 1 hour")) {
                                                        $update = true;
                                                }
                                                break;
                                        case 0:
                                        default:
-                                               if (datetime_convert('UTC', 'UTC', 'now') > datetime_convert('UTC', 'UTC', $t . " + ".$min_poll_interval." minute")) {
+                                               if (DateTimeFormat::utcNow() > DateTimeFormat::utc($t . " + ".$min_poll_interval." minute")) {
                                                        $update = true;
                                                }
                                                break;
index ed1675031392bac04e826458c684afeb5059083f..cf5759e598702af7b41c91adcecb0e48d6729ab8 100644 (file)
@@ -8,6 +8,7 @@ namespace Friendica\Worker;
 use Friendica\Core\Addon;
 use Friendica\Core\Config;
 use Friendica\Core\Worker;
+use Friendica\Util\DateTimeFormat;
 
 Class CronHooks {
        public static function execute($hook = '') {
@@ -44,7 +45,7 @@ Class CronHooks {
 
                logger('cronhooks: start');
 
-               $d = datetime_convert();
+               $d = DateTimeFormat::utcNow();
 
                if (is_array($a->hooks) && array_key_exists("cron", $a->hooks)) {
                        foreach ($a->hooks["cron"] as $hook) {
index 0657b0e1b23b4ffe6feaa2a1733a4fa707cb50b7..b3f4dab78643b1ac74caae316bf9a0da7e953df3 100644 (file)
@@ -11,6 +11,7 @@ use Friendica\Database\DBM;
 use Friendica\Model\GContact;
 use Friendica\Network\Probe;
 use Friendica\Protocol\PortableContact;
+use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
 
 require_once 'include/datetime.php';
@@ -197,7 +198,7 @@ class DiscoverPoCo {
                                }
                        } else {
                                q("UPDATE `gcontact` SET `last_failure` = '%s' WHERE `nurl` = '%s'",
-                                       dbesc(datetime_convert()), dbesc(normalise_link($user["url"])));
+                                       dbesc(DateTimeFormat::utcNow()), dbesc(normalise_link($user["url"])));
                        }
 
                        // Quit the loop after 3 minutes
index c83c69f7aed3a49f04ee3a950e686dd2c1ca705b..b95f43c382833401b9b95d8ba98a8140b0c90efe 100644 (file)
@@ -14,6 +14,8 @@ use Friendica\Protocol\Email;
 use Friendica\Protocol\PortableContact;
 use Friendica\Util\Network;
 use Friendica\Util\XML;
+use Friendica\Util\Temporal;
+use Friendica\Util\DateTimeFormat;
 use dba;
 
 require_once 'include/dba.php';
@@ -43,7 +45,7 @@ class OnePoll
                        return;
                }
 
-               $d = datetime_convert();
+               $d = DateTimeFormat::utcNow();
 
                $contact = dba::selectFirst('contact', [], ['id' => $contact_id]);
                if (!DBM::is_result($contact)) {
@@ -69,7 +71,7 @@ class OnePoll
                // Diaspora users, archived users and followers are only checked if they still exist.
                if ($contact['archive'] || ($contact["network"] == NETWORK_DIASPORA) || ($contact["rel"] == CONTACT_IS_FOLLOWER)) {
                        $last_updated = PortableContact::lastUpdated($contact["url"], true);
-                       $updated = datetime_convert();
+                       $updated = DateTimeFormat::utcNow();
                        if ($last_updated) {
                                logger('Contact '.$contact['id'].' had last update on '.$last_updated, LOGGER_DEBUG);
 
@@ -98,7 +100,7 @@ class OnePoll
                        $contact['priority'] = intval($poll_interval);
                        $hub_update = false;
 
-                       if (datetime_convert('UTC', 'UTC', 'now') > datetime_convert('UTC', 'UTC', $t . " + 1 day")) {
+                       if (DateTimeFormat::utcNow() > DateTimeFormat::utc($t . " + 1 day")) {
                                $hub_update = true;
                        }
                } else {
@@ -106,8 +108,8 @@ class OnePoll
                }
 
                $last_update = (($contact['last-update'] <= NULL_DATE)
-                       ? datetime_convert('UTC', 'UTC', 'now - 7 days', ATOM_TIME)
-                       : datetime_convert('UTC', 'UTC', $contact['last-update'], ATOM_TIME)
+                       ? DateTimeFormat::utc('now - 7 days', DateTimeFormat::ATOM)
+                       : DateTimeFormat::utc($contact['last-update'], DateTimeFormat::ATOM)
                );
 
                // Update the contact entry
@@ -116,7 +118,7 @@ class OnePoll
                                logger("Skipping probably dead contact ".$contact['url']);
 
                                // set the last-update so we don't keep polling
-                               dba::update('contact', ['last-update' => datetime_convert()], ['id' => $contact['id']]);
+                               dba::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]);
                                return;
                        }
 
@@ -125,7 +127,7 @@ class OnePoll
                                logger('Contact is marked dead');
 
                                // set the last-update so we don't keep polling
-                               dba::update('contact', ['last-update' => datetime_convert()], ['id' => $contact['id']]);
+                               dba::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]);
                                return;
                        } else {
                                Contact::unmarkForArchival($contact);
@@ -136,7 +138,7 @@ class OnePoll
                        logger('Ignore public contacts');
 
                        // set the last-update so we don't keep polling
-                       dba::update('contact', ['last-update' => datetime_convert()], ['id' => $contact['id']]);
+                       dba::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]);
                        return;
                }
 
@@ -148,7 +150,7 @@ class OnePoll
                        logger('No self contact for user '.$importer_uid);
 
                        // set the last-update so we don't keep polling
-                       dba::update('contact', ['last-update' => datetime_convert()], ['id' => $contact['id']]);
+                       dba::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]);
                        return;
                }
 
@@ -184,7 +186,7 @@ class OnePoll
 
                        if ($ret['errno'] == CURLE_OPERATION_TIMEDOUT) {
                                // set the last-update so we don't keep polling
-                               dba::update('contact', ['last-update' => datetime_convert()], ['id' => $contact['id']]);
+                               dba::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]);
                                Contact::markForArchival($contact);
                                return;
                        }
@@ -206,7 +208,7 @@ class OnePoll
                                Contact::markForArchival($contact);
 
                                // set the last-update so we don't keep polling
-                               $fields = ['last-update' => datetime_convert(), 'failure_update' => datetime_convert()];
+                               $fields = ['last-update' => DateTimeFormat::utcNow(), 'failure_update' => DateTimeFormat::utcNow()];
                                self::updateContact($contact, $fields);
                                return;
                        }
@@ -216,7 +218,7 @@ class OnePoll
 
                                Contact::markForArchival($contact);
 
-                               $fields = ['last-update' => datetime_convert(), 'failure_update' => datetime_convert()];
+                               $fields = ['last-update' => DateTimeFormat::utcNow(), 'failure_update' => DateTimeFormat::utcNow()];
                                self::updateContact($contact, $fields);
                                return;
                        }
@@ -229,7 +231,7 @@ class OnePoll
 
                                // we may not be friends anymore. Will keep trying for one month.
                                // set the last-update so we don't keep polling
-                               $fields = ['last-update' => datetime_convert(), 'failure_update' => datetime_convert()];
+                               $fields = ['last-update' => DateTimeFormat::utcNow(), 'failure_update' => DateTimeFormat::utcNow()];
                                self::updateContact($contact, $fields);
 
                                Contact::markForArchival($contact);
@@ -240,7 +242,7 @@ class OnePoll
 
                        if ((intval($res->status) != 0) || !strlen($res->challenge) || !strlen($res->dfrn_id)) {
                                // set the last-update so we don't keep polling
-                               dba::update('contact', ['last-update' => datetime_convert()], ['id' => $contact['id']]);
+                               dba::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]);
                                return;
                        }
 
@@ -275,7 +277,7 @@ class OnePoll
                                logger('ID did not decode: ' . $contact['id'] . ' orig: ' . $orig_id . ' final: ' . $final_dfrn_id);
 
                                // set the last-update so we don't keep polling
-                               dba::update('contact', ['last-update' => datetime_convert()], ['id' => $contact['id']]);
+                               dba::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]);
                                Contact::markForArchival($contact);
                                return;
                        }
@@ -310,7 +312,7 @@ class OnePoll
 
                        if ($contact['rel'] == CONTACT_IS_FOLLOWER || $contact['blocked'] || $contact['readonly']) {
                                // set the last-update so we don't keep polling
-                               dba::update('contact', ['last-update' => datetime_convert()], ['id' => $contact['id']]);
+                               dba::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]);
                                return;
                        }
 
@@ -320,7 +322,7 @@ class OnePoll
 
                        if ($ret['errno'] == CURLE_OPERATION_TIMEDOUT) {
                                // set the last-update so we don't keep polling
-                               dba::update('contact', ['last-update' => datetime_convert()], ['id' => $contact['id']]);
+                               dba::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]);
                                Contact::markForArchival($contact);
                                return;
                        }
@@ -334,7 +336,7 @@ class OnePoll
                        $mail_disabled = ((function_exists('imap_open') && (! Config::get('system', 'imap_disabled'))) ? 0 : 1);
                        if ($mail_disabled) {
                                // set the last-update so we don't keep polling
-                               dba::update('contact', ['last-update' => datetime_convert()], ['id' => $contact['id']]);
+                               dba::update('contact', ['last-update' => DateTimeFormat::utcNow()], ['id' => $contact['id']]);
                                Contact::markForArchival($contact);
                                return;
                        }
@@ -354,7 +356,7 @@ class OnePoll
                                unset($password);
                                logger("Mail: Connect to " . $mailconf['user']);
                                if ($mbox) {
-                                       $fields = ['last_check' => datetime_convert()];
+                                       $fields = ['last_check' => DateTimeFormat::utcNow()];
                                        dba::update('mailacct', $fields, ['id' => $mailconf['id']]);
                                        logger("Mail: Connected to " . $mailconf['user']);
                                } else {
@@ -394,7 +396,7 @@ class OnePoll
                                                                // Only delete when mails aren't automatically moved or deleted
                                                                if (($mailconf['action'] != 1) && ($mailconf['action'] != 3))
                                                                        if ($meta->deleted && ! $item['deleted']) {
-                                                                               $fields = ['deleted' => true, 'changed' => datetime_convert()];
+                                                                               $fields = ['deleted' => true, 'changed' => DateTimeFormat::utcNow()];
                                                                                dba::update('item', $fields, ['id' => $item['id']]);
                                                                        }
 
@@ -458,7 +460,7 @@ class OnePoll
                                                        $datarray['title'] = notags(trim($datarray['title']));
 
                                                        //$datarray['title'] = notags(trim($meta->subject));
-                                                       $datarray['created'] = datetime_convert('UTC', 'UTC', $meta->date);
+                                                       $datarray['created'] = DateTimeFormat::utc($meta->date);
 
                                                        // Is it a reply?
                                                        $reply = ((substr(strtolower($datarray['title']), 0, 3) == "re:") ||
@@ -571,7 +573,7 @@ class OnePoll
                        if (!strstr($xml, '<')) {
                                logger('post_handshake: response from ' . $url . ' did not contain XML.');
 
-                               $fields = ['last-update' => datetime_convert(), 'failure_update' => datetime_convert()];
+                               $fields = ['last-update' => DateTimeFormat::utcNow(), 'failure_update' => DateTimeFormat::utcNow()];
                                self::updateContact($contact, $fields);
                                Contact::markForArchival($contact);
                                return;
@@ -615,19 +617,19 @@ class OnePoll
                                }
                        }
 
-                       $updated = datetime_convert();
+                       $updated = DateTimeFormat::utcNow();
 
                        self::updateContact($contact, ['last-update' => $updated, 'success_update' => $updated]);
                        dba::update('gcontact', ['last_contact' => $updated], ['nurl' => $contact['nurl']]);
                        Contact::unmarkForArchival($contact);
                } elseif (in_array($contact["network"], [NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS, NETWORK_FEED])) {
-                       $updated = datetime_convert();
+                       $updated = DateTimeFormat::utcNow();
 
                        self::updateContact($contact, ['last-update' => $updated, 'failure_update' => $updated]);
                        dba::update('gcontact', ['last_failure' => $updated], ['nurl' => $contact['nurl']]);
                        Contact::markForArchival($contact);
                } else {
-                       $updated = datetime_convert();
+                       $updated = DateTimeFormat::utcNow();
                        dba::update('contact', ['last-update' => $updated], ['id' => $contact['id']]);
                }
 
index a506f0e087f55be156b583ae33bbbb9ec2cf062a..98a62818e9bed6575155715ee691cb2c7d4197fd 100644 (file)
@@ -1,16 +1,20 @@
 <?php
+
 /**
  * @file src/Worker/UpdateGcontact.php
  */
+
 namespace Friendica\Worker;
 
-use Friendica\Core\Config;
 use Friendica\Database\DBM;
 use Friendica\Network\Probe;
 use Friendica\Protocol\PortableContact;
+use Friendica\Util\DateTimeFormat;
 
-class UpdateGContact {
-       public static function execute($contact_id) {
+class UpdateGContact
+{
+       public static function execute($contact_id)
+       {
                global $a;
 
                logger('update_gcontact: start');
@@ -33,25 +37,30 @@ class UpdateGContact {
                $data = Probe::uri($r[0]["url"]);
 
                if (!in_array($data["network"], [NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS])) {
-                       if ($r[0]["server_url"] != "")
+                       if ($r[0]["server_url"] != "") {
                                PortableContact::checkServer($r[0]["server_url"], $r[0]["network"]);
+                       }
 
                        q("UPDATE `gcontact` SET `last_failure` = '%s' WHERE `id` = %d",
-                               dbesc(datetime_convert()), intval($contact_id));
+                               dbesc(DateTimeFormat::utcNow()), intval($contact_id));
                        return;
                }
 
-               if (($data["name"] == "") && ($r[0]['name'] != ""))
+               if (($data["name"] == "") && ($r[0]['name'] != "")) {
                        $data["name"] = $r[0]['name'];
+               }
 
-               if (($data["nick"] == "") && ($r[0]['nick'] != ""))
+               if (($data["nick"] == "") && ($r[0]['nick'] != "")) {
                        $data["nick"] = $r[0]['nick'];
+               }
 
-               if (($data["addr"] == "") && ($r[0]['addr'] != ""))
+               if (($data["addr"] == "") && ($r[0]['addr'] != "")) {
                        $data["addr"] = $r[0]['addr'];
+               }
 
-               if (($data["photo"] == "") && ($r[0]['photo'] != ""))
+               if (($data["photo"] == "") && ($r[0]['photo'] != "")) {
                        $data["photo"] = $r[0]['photo'];
+               }
 
 
                q("UPDATE `gcontact` SET `name` = '%s', `nick` = '%s', `addr` = '%s', `photo` = '%s'
@@ -60,8 +69,8 @@ class UpdateGContact {
                                        dbesc($data["nick"]),
                                        dbesc($data["addr"]),
                                        dbesc($data["photo"]),
-                                       intval($contact_id)
-                               );
+                       intval($contact_id)
+               );
 
                q("UPDATE `contact` SET `name` = '%s', `nick` = '%s', `addr` = '%s', `photo` = '%s'
                                        WHERE `uid` = 0 AND `addr` = '' AND `nurl` = '%s'",
@@ -70,12 +79,12 @@ class UpdateGContact {
                                        dbesc($data["addr"]),
                                        dbesc($data["photo"]),
                                        dbesc(normalise_link($data["url"]))
-                               );
+               );
 
                q("UPDATE `contact` SET `addr` = '%s'
                                        WHERE `uid` != 0 AND `addr` = '' AND `nurl` = '%s'",
                                        dbesc($data["addr"]),
                                        dbesc(normalise_link($data["url"]))
-                               );
+               );
        }
 }
diff --git a/view/templates/field_datetime.tpl b/view/templates/field_datetime.tpl
new file mode 100644 (file)
index 0000000..6b34316
--- /dev/null
@@ -0,0 +1,35 @@
+{{include file='field_input.tpl' field=$field}}<script type="text/javascript">
+       $(function () {
+               $('#id_{{$field.0}}').datetimepicker({
+                       step: 5,
+                       format: '{{$datetimepicker.dateformat}}',
+{{if $datetimepicker.minDate}}
+                       minDate: new Date({{$datetimepicker.minDate->getTimestamp()}} * 1000),
+                       yearStart: {{$datetimepicker.minDate->format('Y')}},
+{{/if}}
+{{if $datetimepicker.maxDate}}
+                       maxDate: new Date({{$datetimepicker.maxDate->getTimestamp()}} * 1000),
+                       yearEnd: {{$datetimepicker.maxDate->format('Y')}},
+{{/if}}
+{{if $datetimepicker.defaultDate}}
+                       defaultDate: new Date({{$datetimepicker.defaultDate->getTimestamp()}} * 1000),
+{{/if}}
+                       dayOfWeekStart: {{$datetimepicker.firstDay}},
+                       lang: '{{$datetimepicker.lang}}'
+               });
+{{if $datetimepicker.minfrom }}
+               $('#id_{{$datetimepicker.minfrom}}').data('xdsoft_datetimepicker').setOptions({
+                       onChangeDateTime: function (currentDateTime) {
+                               $('#id_{{$field.0}}').data('xdsoft_datetimepicker').setOptions({minDate: currentDateTime});
+                       }
+               });
+{{/if}}
+{{if $datetimepicker.maxfrom }}
+               $('#id_{{$datetimepicker.maxfrom}}').data('xdsoft_datetimepicker').setOptions({
+                       onChangeDateTime: function (currentDateTime) {
+                               $('#id_{{$field.0}}').data('xdsoft_datetimepicker').setOptions({maxDate: currentDateTime});
+                       }
+               });
+{{/if}}
+       })
+</script>
index c7b0bbfb2380598a2c2d535feef8376adeb7139d..bbd7535e54fef0cb3badbe5eb01748a67af20457 100644 (file)
@@ -1,7 +1,7 @@
 
 <div id="id_{{$field.0}}_wrapper" class="form-group field input">
        <label for="id_{{$field.0}}" id="label_{{$field.0}}">{{$field.1}}{{if $field.4}}<span class="required"> {{$field.4}}</span>{{/if}}</label>
-       <input class="form-control" name="{{$field.0}}" id="id_{{$field.0}}" {{if $field.6 eq "email"}} type="email"{{elseif $field.6 eq "url"}} type="url"{{else}} type="text"{{/if}} value="{{$field.2|escape:'html'}}" {{if $field.4 eq "required"}} required{{/if}}{{if $field.5 eq "autofocus"}} autofocus{{elseif $field.5}} {{$field.5}}{{/if}} aria-describedby="{{$field.0}}_tip">
+       <input class="form-control" name="{{$field.0}}" id="id_{{$field.0}}"{{if $field.6 eq "email"}} type="email"{{elseif $field.6 eq "url"}} type="url"{{else}} type="text"{{/if}} value="{{$field.2|escape:'html'}}"{{if $field.4 eq "required"}} required{{/if}}{{if $field.5 eq "autofocus"}} autofocus{{elseif $field.5}} {{$field.5}}{{/if}} aria-describedby="{{$field.0}}_tip">
        <span id="{{$field.0}}_tip" class="help-block" role="tooltip">{{$field.3}}</span>
        <div class="clear"></div>
 </div>