mirror of
https://github.com/friendica/friendica
synced 2024-11-09 23:02:54 +00:00
[frio] Fix event time display
This commit is contained in:
parent
9935e8e711
commit
a9bb53b021
4 changed files with 123 additions and 46 deletions
|
@ -49,12 +49,6 @@ function events_init(App $a)
|
||||||
return;
|
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'])) {
|
if (empty(DI::page()['aside'])) {
|
||||||
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);
|
$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);
|
$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
|
// put the event parametes in an array so we can better transmit them
|
||||||
$event_params = [
|
$event_params = [
|
||||||
'event_id' => intval($_GET['id'] ?? 0),
|
'event_id' => intval($_GET['id'] ?? 0),
|
||||||
|
@ -369,12 +350,6 @@ function events_content(App $a)
|
||||||
$events = Event::prepareListForTemplate($r);
|
$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'])) {
|
if (!empty($_GET['id'])) {
|
||||||
$tpl = Renderer::getMarkupTemplate("event.tpl");
|
$tpl = Renderer::getMarkupTemplate("event.tpl");
|
||||||
} else {
|
} else {
|
||||||
|
|
104
src/Module/Events/Json.php
Normal file
104
src/Module/Events/Json.php
Normal file
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -259,6 +259,8 @@ return [
|
||||||
'/dirfind' => [Module\Search\Directory::class, [R::GET]],
|
'/dirfind' => [Module\Search\Directory::class, [R::GET]],
|
||||||
'/directory' => [Module\Directory::class, [R::GET]],
|
'/directory' => [Module\Directory::class, [R::GET]],
|
||||||
|
|
||||||
|
'/events/json' => [Module\Events\Json::class, [R::GET]],
|
||||||
|
|
||||||
'/feed' => [
|
'/feed' => [
|
||||||
'/{nickname}' => [Module\Feed::class, [R::GET]],
|
'/{nickname}' => [Module\Feed::class, [R::GET]],
|
||||||
'/{nickname}/posts' => [Module\Feed::class, [R::GET]],
|
'/{nickname}/posts' => [Module\Feed::class, [R::GET]],
|
||||||
|
|
|
@ -42,7 +42,6 @@ $(document).ready(function () {
|
||||||
defaultView: "month",
|
defaultView: "month",
|
||||||
aspectRatio: 1,
|
aspectRatio: 1,
|
||||||
eventRender: function (event, element, view) {
|
eventRender: function (event, element, view) {
|
||||||
//console.log(view.name);
|
|
||||||
switch (view.name) {
|
switch (view.name) {
|
||||||
case "month":
|
case "month":
|
||||||
element
|
element
|
||||||
|
@ -52,8 +51,8 @@ $(document).ready(function () {
|
||||||
event.item["author-avatar"],
|
event.item["author-avatar"],
|
||||||
event.item["author-name"],
|
event.item["author-name"],
|
||||||
event.title,
|
event.title,
|
||||||
event.item.desc,
|
event.desc,
|
||||||
event.item.location,
|
event.location,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
@ -65,8 +64,8 @@ $(document).ready(function () {
|
||||||
"<img src='{0}' style='height:12px; width:12px'>{1}<p>{2}</p><p>{3}</p>".format(
|
"<img src='{0}' style='height:12px; width:12px'>{1}<p>{2}</p><p>{3}</p>".format(
|
||||||
event.item["author-avatar"],
|
event.item["author-avatar"],
|
||||||
event.item["author-name"],
|
event.item["author-name"],
|
||||||
event.item.desc,
|
event.desc,
|
||||||
htmlToText(event.item.location),
|
htmlToText(event.location),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
@ -78,8 +77,8 @@ $(document).ready(function () {
|
||||||
"<img src='{0}' style='height:24px;width:24px'>{1}<p>{2}</p><p>{3}</p>".format(
|
"<img src='{0}' style='height:24px;width:24px'>{1}<p>{2}</p><p>{3}</p>".format(
|
||||||
event.item["author-avatar"],
|
event.item["author-avatar"],
|
||||||
event.item["author-name"],
|
event.item["author-name"],
|
||||||
event.item.desc,
|
event.desc,
|
||||||
htmlToText(event.item.location),
|
htmlToText(event.location),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
@ -252,27 +251,24 @@ function eventHoverHtmlContent(event) {
|
||||||
moment.locale(locale);
|
moment.locale(locale);
|
||||||
|
|
||||||
// format dates to different styles
|
// format dates to different styles
|
||||||
var startDate = moment(event.item.start).format("dd HH:mm");
|
var startDate = event.start.format('dd HH:mm');
|
||||||
var endDate = moment(event.item.finsih).format("dd HH:mm");
|
var monthShort = event.start.format('MMM');
|
||||||
var monthShort = moment(event.item.start).format("MMM");
|
var dayNumberStart = event.start.format('DD');
|
||||||
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 formattedDate = startDate;
|
var formattedDate = startDate;
|
||||||
|
|
||||||
// We only need the to format the end date if the event does have
|
// We only need the to format the end date if the event does have
|
||||||
// a finish date.
|
// 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;
|
formattedDate = startDate + " - " + endTime;
|
||||||
|
|
||||||
// use a different Format (15. Feb - 18. Feb) if the events end date
|
// use a different Format (15. Feb - 18. Feb) if the events end date
|
||||||
// is not the start date
|
// is not the start date
|
||||||
if (dayNumberStart != dayNumberEnd) {
|
if (dayNumberStart !== dayNumberEnd) {
|
||||||
formattedDate =
|
formattedDate = event.start.format('Do MMM') + ' - ' + event.end.format('Do MMM');
|
||||||
moment(event.item.start).format("Do MMM") + " - " + moment(event.item.finish).format("Do MMM");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -280,8 +276,8 @@ function eventHoverHtmlContent(event) {
|
||||||
data = eventHoverBodyTemplate();
|
data = eventHoverBodyTemplate();
|
||||||
|
|
||||||
// Get only template data if there exists location data
|
// Get only template data if there exists location data
|
||||||
if (event.item.location) {
|
if (event.location) {
|
||||||
var eventLocationText = htmlToText(event.item.location);
|
var eventLocationText = htmlToText(event.location);
|
||||||
// Get the the html template for formatting the location
|
// Get the the html template for formatting the location
|
||||||
var eventLocationTemplate = eventHoverLocationTemplate();
|
var eventLocationTemplate = eventHoverLocationTemplate();
|
||||||
// Format the event location data according to the the event location
|
// Format the event location data according to the the event location
|
||||||
|
|
Loading…
Reference in a new issue