OSDN Git Service

Plugin::NewslashHelper: add mysql format support to format_timestamp helper
authorhylom <hylom@users.sourceforge.jp>
Fri, 30 Nov 2018 12:25:10 +0000 (21:25 +0900)
committerhylom <hylom@users.sourceforge.jp>
Fri, 30 Nov 2018 12:25:10 +0000 (21:25 +0900)
src/newslash_web/lib/Newslash/Plugin/NewslashHelpers.pm

index 7b612cf..f48c7a2 100644 (file)
@@ -3,6 +3,10 @@ use Mojo::Base 'Mojolicious::Plugin';
 use Mojo::JSON qw(to_json from_json);
 use Mojo::Util qw(decamelize);
 use Template;
+use DateTime;
+use DateTime::Format::MySQL;
+use DateTime::Format::ISO8601;
+use Data::Dumper;
 
 sub register {
     my ($self, $app, $conf) = @_;
@@ -183,6 +187,7 @@ sub _get_sidebar_item {
 sub _format_timestamp {
     my $c = shift;
     my $params = {};
+    my $user = $params->{user} || $c->stash('user');
 
     if (!ref($_[0])) {
         $params = {@_};
@@ -191,8 +196,8 @@ sub _format_timestamp {
     }
 
     my $offset_sec = 0;
-    if ($params->{user} && $params->{user}->{config}->{ui}->{offset_sec}) {
-        $offset_sec = $params->{user}->{config}->{ui}->{offset_sec};
+    if ($user && $user->{config}->{ui}->{offset_sec}) {
+        $offset_sec = $user->{config}->{ui}->{offset_sec};
     }
 
     my $dt;
@@ -200,6 +205,8 @@ sub _format_timestamp {
         $dt = DateTime->from_epoch(epoch => $params->{from_epoch});
     } elsif ($params->{datetime}) {
         $dt = $params->{datetime}
+    } elsif ($params->{mysql}) {
+        $dt = DateTime::Format::MySQL->parse_datetime($params->{mysql});
     } else {
         return;
     }
@@ -208,11 +215,17 @@ sub _format_timestamp {
         $dt->add(seconds => $offset_sec);
     }
 
-    my $format = $params->{format} || $params->{user} ? "user" : "simple";
+    my $format = $params->{format} || ($params->{user} ? "user" : "simple");
+    warn Dumper $params;
+    warn $format;
     if ($format eq "simple") {
         return $dt->strftime('%Y-%m-%d %H:%M:%S');
-    } elsif ($format eq "user" && $params->{user}) {
-        return $dt->strftime($params->{user}->{config}->{time_format});
+    }
+    elsif ($format eq "iso8601") {
+        return $dt->strftime('%Y-%m-%dT%H:%M:%S+00:00');
+    }
+    elsif ($format eq "user" && $user) {
+        return $dt->strftime($user->{config}->{time_format});
     }
 
     return;