]> git.mxchange.org Git - friendica.git/commitdiff
[frio] Fix event time display
authorHypolite Petovan <hypolite@mrpetovan.com>
Sun, 3 Oct 2021 17:29:28 +0000 (13:29 -0400)
committerHypolite Petovan <hypolite@mrpetovan.com>
Sun, 3 Oct 2021 17:42:32 +0000 (13:42 -0400)
mod/events.php
src/Module/Events/Json.php [new file with mode: 0644]
static/routes.config.php
view/theme/frio/js/mod_events.js

index 6ce322a4df4894ee767e5310c4ad460072986b74..1b8a509b7015f9c7b9417734494de8350401886e 100644 (file)
@@ -49,12 +49,6 @@ function events_init(App $a)
                return;
        }
 
-       // If it's a json request abort here because we don't
-       // need the widget data
-       if (DI::args()->getArgc() > 1 && DI::args()->getArgv()[1] === 'json') {
-               return;
-       }
-
        if (empty(DI::page()['aside'])) {
                DI::page()['aside'] = '';
        }
@@ -321,19 +315,6 @@ function events_content(App $a)
                $start  = sprintf('%d-%d-%d %d:%d:%d', $y, $m, 1, 0, 0, 0);
                $finish = sprintf('%d-%d-%d %d:%d:%d', $y, $m, $dim, 23, 59, 59);
 
-               if (DI::args()->getArgc() > 1 && DI::args()->getArgv()[1] === 'json') {
-                       if (!empty($_GET['start'])) {
-                               $start = $_GET['start'];
-                       }
-                       if (!empty($_GET['end'])) {
-                               $finish = $_GET['end'];
-                       }
-               }
-
-               $start  = DateTimeFormat::utc($start);
-               $finish = DateTimeFormat::utc($finish);
-
-
                // put the event parametes in an array so we can better transmit them
                $event_params = [
                        'event_id'      => intval($_GET['id'] ?? 0),
@@ -369,12 +350,6 @@ function events_content(App $a)
                        $events = Event::prepareListForTemplate($r);
                }
 
-               if (DI::args()->getArgc() > 1 && DI::args()->getArgv()[1] === 'json') {
-                       header('Content-Type: application/json');
-                       echo json_encode($events);
-                       exit();
-               }
-
                if (!empty($_GET['id'])) {
                        $tpl = Renderer::getMarkupTemplate("event.tpl");
                } else {
diff --git a/src/Module/Events/Json.php b/src/Module/Events/Json.php
new file mode 100644 (file)
index 0000000..50e468a
--- /dev/null
@@ -0,0 +1,104 @@
+<?php
+
+namespace Friendica\Module\Events;
+
+use Friendica\Database\DBA;
+use Friendica\DI;
+use Friendica\Model\Event;
+use Friendica\Model\Item;
+use Friendica\Model\Post;
+use Friendica\Network\HTTPException;
+use Friendica\Util\DateTimeFormat;
+use Friendica\Util\Temporal;
+
+class Json extends \Friendica\BaseModule
+{
+       public static function rawContent(array $parameters = [])
+       {
+               if (!local_user()) {
+                       throw new HTTPException\UnauthorizedException();
+               }
+
+               $y = intval(DateTimeFormat::localNow('Y'));
+               $m = intval(DateTimeFormat::localNow('m'));
+
+               // Put some limit on dates. The PHP date functions don't seem to do so well before 1900.
+               if ($y < 1901) {
+                       $y = 1900;
+               }
+
+               $dim    = Temporal::getDaysInMonth($y, $m);
+               $start  = sprintf('%d-%d-%d %d:%d:%d', $y, $m, 1, 0, 0, 0);
+               $finish = sprintf('%d-%d-%d %d:%d:%d', $y, $m, $dim, 23, 59, 59);
+
+               if (!empty($_GET['start'])) {
+                       $start = $_GET['start'];
+               }
+
+               if (!empty($_GET['end'])) {
+                       $finish = $_GET['end'];
+               }
+
+               // put the event parametes in an array so we can better transmit them
+               $event_params = [
+                       'event_id' => intval($_GET['id'] ?? 0),
+                       'start'    => $start,
+                       'finish'   => $finish,
+                       'ignore'   => 0,
+               ];
+
+               // get events by id or by date
+               if ($event_params['event_id']) {
+                       $r = Event::getListById(local_user(), $event_params['event_id']);
+               } else {
+                       $r = Event::getListByDate(local_user(), $event_params);
+               }
+
+               $links = [];
+
+               if (DBA::isResult($r)) {
+                       $r = Event::sortByDate($r);
+                       foreach ($r as $rr) {
+                               $j = DateTimeFormat::utc($rr['start'], 'j');
+                               if (empty($links[$j])) {
+                                       $links[$j] = DI::baseUrl() . '/' . DI::args()->getCommand() . '#link-' . $j;
+                               }
+                       }
+               }
+
+               $events = [];
+
+               // transform the event in a usable array
+               if (DBA::isResult($r)) {
+                       $events = Event::sortByDate($r);
+
+                       $events = self::map($events);
+               }
+
+               header('Content-Type: application/json');
+               echo json_encode($events);
+               exit();
+       }
+
+       private static function map(array $events): array
+       {
+               return array_map(function ($event) {
+                       $item = Post::selectFirst(['plink', 'author-name', 'author-avatar', 'author-link', 'private', 'uri-id'], ['id' => $event['itemid']]);
+                       if (!DBA::isResult($item)) {
+                               // Using default values when no item had been found
+                               $item = ['plink' => '', 'author-name' => '', 'author-avatar' => '', 'author-link' => '', 'private' => Item::PUBLIC, 'uri-id' => ($event['uri-id'] ?? 0)];
+                       }
+
+                       return [
+                               'id'       => $event['id'],
+                               'title'    => $event['summary'],
+                               'start'    => DateTimeFormat::local($event['start']),
+                               'end'      => DateTimeFormat::local($event['finish']),
+                               'nofinish' => $event['nofinish'],
+                               'desc'     => $event['desc'],
+                               'location' => $event['location'],
+                               'item'     => $item,
+                       ];
+               }, $events);
+       }
+}
index 1bcae4a7d39bfce9624122ca4b26bec9e5b26bce..2f20d5177035b1406b64cd9f987051384bfc85f1 100644 (file)
@@ -259,6 +259,8 @@ return [
        '/dirfind'                  => [Module\Search\Directory::class, [R::GET]],
        '/directory'                => [Module\Directory::class,        [R::GET]],
 
+       '/events/json'                => [Module\Events\Json::class,        [R::GET]],
+
        '/feed'     => [
                '/{nickname}'          => [Module\Feed::class, [R::GET]],
                '/{nickname}/posts'    => [Module\Feed::class, [R::GET]],
index 464afc3e60396ab3f935b53c78e0638a324f1afd..c1f22761c45d02e425a452de68cee89556603ded 100644 (file)
@@ -42,7 +42,6 @@ $(document).ready(function () {
                defaultView: "month",
                aspectRatio: 1,
                eventRender: function (event, element, view) {
-                       //console.log(view.name);
                        switch (view.name) {
                                case "month":
                                        element
@@ -52,8 +51,8 @@ $(document).ready(function () {
                                                                event.item["author-avatar"],
                                                                event.item["author-name"],
                                                                event.title,
-                                                               event.item.desc,
-                                                               event.item.location,
+                                                               event.desc,
+                                                               event.location,
                                                        ),
                                                );
                                        break;
@@ -65,8 +64,8 @@ $(document).ready(function () {
                                                        "<img src='{0}' style='height:12px; width:12px'>{1}<p>{2}</p><p>{3}</p>".format(
                                                                event.item["author-avatar"],
                                                                event.item["author-name"],
-                                                               event.item.desc,
-                                                               htmlToText(event.item.location),
+                                                               event.desc,
+                                                               htmlToText(event.location),
                                                        ),
                                                );
                                        break;
@@ -78,8 +77,8 @@ $(document).ready(function () {
                                                        "<img src='{0}' style='height:24px;width:24px'>{1}<p>{2}</p><p>{3}</p>".format(
                                                                event.item["author-avatar"],
                                                                event.item["author-name"],
-                                                               event.item.desc,
-                                                               htmlToText(event.item.location),
+                                                               event.desc,
+                                                               htmlToText(event.location),
                                                        ),
                                                );
                                        break;
@@ -252,27 +251,24 @@ function eventHoverHtmlContent(event) {
        moment.locale(locale);
 
        // format dates to different styles
-       var startDate = moment(event.item.start).format("dd HH:mm");
-       var endDate = moment(event.item.finsih).format("dd HH:mm");
-       var monthShort = moment(event.item.start).format("MMM");
-       var dayNumberStart = moment(event.item.start).format("DD");
-       var dayNumberEnd = moment(event.item.finish).format("DD");
-       var startTime = moment(event.item.start).format("HH:mm");
-       var endTime = moment(event.item.finish).format("HH:mm");
-       var monthNumber;
+       var startDate = event.start.format('dd HH:mm');
+       var monthShort = event.start.format('MMM');
+       var dayNumberStart = event.start.format('DD');
 
        var formattedDate = startDate;
 
        // We only need the to format the end date if the event does have
        // a finish date.
-       if (event.item.nofinish == 0) {
+       if (event.nofinish === 0 && event.end !== null) {
+               var dayNumberEnd = event.end.format('DD');
+               var endTime = event.end.format('HH:mm');
+
                formattedDate = startDate + " - " + endTime;
 
                // use a different Format (15. Feb - 18. Feb) if the events end date
                // is not the start date
-               if (dayNumberStart != dayNumberEnd) {
-                       formattedDate =
-                               moment(event.item.start).format("Do MMM") + " - " + moment(event.item.finish).format("Do MMM");
+               if (dayNumberStart !== dayNumberEnd) {
+                       formattedDate = event.start.format('Do MMM') + ' - ' + event.end.format('Do MMM');
                }
        }
 
@@ -280,8 +276,8 @@ function eventHoverHtmlContent(event) {
        data = eventHoverBodyTemplate();
 
        // Get only template data if there exists location data
-       if (event.item.location) {
-               var eventLocationText = htmlToText(event.item.location);
+       if (event.location) {
+               var eventLocationText = htmlToText(event.location);
                // Get the the html template for formatting the location
                var eventLocationTemplate = eventHoverLocationTemplate();
                // Format the event location data according to the the event location