More local fixes, add some more data to user profile page

This commit is contained in:
Timothy Warren 2023-05-18 15:17:19 -04:00
parent 465cd99165
commit b678a3401e
14 changed files with 109 additions and 54 deletions

View File

@ -3,40 +3,55 @@ use Aviat\AnimeClient\Kitsu;
?> ?>
<main class="user-page details"> <main class="user-page details">
<h2 class="toph"> <h2 class="toph">
About
<?= $helper->a( <?= $helper->a(
"https://kitsu.io/users/{$data['slug']}", "https://kitsu.io/users/{$data['slug']}",
$data['name'], [ $data['name'], [
'title' => 'View profile on Kitsu' 'title' => 'View profile on Kitsu'
]) ])
?> ?>
</h2> </h2>
<p><?= $escape->html($data['about']) ?></p>
<section class="flex flex-no-wrap"> <section class="flex flex-no-wrap">
<aside class="info"> <aside class="info">
<center> <table class="media-details invisible">
<?= $helper->img($data['avatar'], ['alt' => '']); ?> <tr>
</center> <td><?= $helper->img($data['avatar'], ['alt' => '']); ?></td>
<td><?= $escape->html($data['about']) ?></td>
</tr>
</table>
<br /> <br />
<table class="media-details"> <table class="media-details">
<?php foreach ([
'joinDate' => 'Joined',
'birthday' => 'Birthday',
'location' => 'Location'
] as $key => $label): ?>
<?php if ($data[$key] !== null): ?>
<tr> <tr>
<td>Location</td> <td><?= $label ?></td>
<td><?= $data['location'] ?></td> <td><?= $data[$key] ?></td>
</tr> </tr>
<?php endif ?>
<?php endforeach; ?>
<?php if ($data['website'] !== null): ?>
<tr> <tr>
<td>Website</td> <td>Website</td>
<td><?= $helper->a($data['website'], $data['website']) ?></td> <td><?= $helper->a($data['website'], $data['website']) ?></td>
</tr> </tr>
<?php endif ?>
<?php if ( ! empty($data['waifu'])): ?> <?php if ( ! empty($data['waifu'])): ?>
<tr> <tr>
<td><?= $escape->html($data['waifu']['label']) ?></td> <td><?= $escape->html($data['waifu']['label']) ?></td>
<td> <td>
<?php <?php
$character = $data['waifu']['character']; $character = $data['waifu']['character'];
echo $helper->a( echo $component->character(
$url->generate('character', ['slug' => $character['slug']]), $character['names']['canonical'],
$character['names']['canonical'] $url->generate('character', ['slug' => $character['slug']]),
$helper->img(Kitsu::getImage($character))
); );
?> ?>
</td> </td>
@ -75,7 +90,7 @@ use Aviat\AnimeClient\Kitsu;
$rendered[] = $component->character( $rendered[] = $component->character(
$item['names']['canonical'], $item['names']['canonical'],
$url->generate('character', ['slug' => $item['slug']]), $url->generate('character', ['slug' => $item['slug']]),
$helper->img($item['image']['original']['url']) $helper->img(Kitsu::getImage($item))
); );
} }
else else

View File

@ -333,7 +333,8 @@ td.danger, td.danger:hover, td.danger:active {
.borderless th, .borderless th,
.invisible tr, .invisible tr,
.invisible td, .invisible td,
.invisible th { .invisible th,
table.invisible {
box-shadow: none; box-shadow: none;
border: 0; border: 0;
} }
@ -836,19 +837,11 @@ aside.info {
max-width: 390px; max-width: 390px;
} }
/* .fixed aside.info + article {
max-width: inherit;
} */
aside picture, aside img { aside picture, aside img {
display: block; display: block;
margin: 0 auto; margin: 0 auto;
} }
/* aside.info + article {
max-width: 66%;
} */
/* ---------------------------------------------------------------------------- /* ----------------------------------------------------------------------------
User page styles User page styles
-----------------------------------------------------------------------------*/ -----------------------------------------------------------------------------*/

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -19,7 +19,7 @@ query ($slug: String!) {
} }
categories(first: 100) { categories(first: 100) {
nodes { nodes {
title(locales: "*") title(locales: "en")
} }
} }
chapterCount chapterCount
@ -51,7 +51,7 @@ query ($slug: String!) {
startCursor startCursor
} }
} }
description description(locales: "en")
startDate startDate
endDate endDate
mappings(first: 10) { mappings(first: 10) {
@ -98,7 +98,7 @@ query ($slug: String!) {
names { names {
alternatives alternatives
canonical canonical
localized localized(locales: "*")
} }
slug slug
} }
@ -116,7 +116,7 @@ query ($slug: String!) {
titles { titles {
canonical canonical
canonicalLocale canonicalLocale
localized(locales: "*") localized(locales: ["en", "en-t-ja", "ja", "ja-jp"])
} }
} }
} }

View File

@ -18,6 +18,7 @@ query ($slug: String!) {
} }
} }
birthday birthday
createdAt
id id
location location
name name
@ -151,7 +152,7 @@ query ($slug: String!) {
names { names {
canonical canonical
alternatives alternatives
localized localized(locales: "*")
} }
} }
waifuOrHusbando waifuOrHusbando

View File

@ -57,7 +57,7 @@ final class AnimeTransformer extends AbstractTransformer
$details = $rawCharacter['character']; $details = $rawCharacter['character'];
$characters[$type][$details['id']] = [ $characters[$type][$details['id']] = [
'image' => $details['image']['original']['url'] ?? '', 'image' => Kitsu::getImage($details),
'name' => $details['names']['canonical'], 'name' => $details['names']['canonical'],
'slug' => $details['slug'], 'slug' => $details['slug'],
]; ];
@ -101,7 +101,7 @@ final class AnimeTransformer extends AbstractTransformer
$staff[$role][$person['id']] = [ $staff[$role][$person['id']] = [
'id' => $person['id'], 'id' => $person['id'],
'name' => $name, 'name' => $name,
'image' => $person['image']['original']['url'], 'image' => Kitsu::getImage($person),
'slug' => $person['slug'], 'slug' => $person['slug'],
]; ];

View File

@ -49,7 +49,7 @@ final class CharacterTransformer extends AbstractTransformer
'castings' => $castings, 'castings' => $castings,
'description' => $data['description']['en'], 'description' => $data['description']['en'],
'id' => $data['id'], 'id' => $data['id'],
'image' => $data['image']['original']['url'] ?? 'images/placeholder.png', 'image' => Kitsu::getImage($data),
'media' => $media, 'media' => $media,
'name' => $name, 'name' => $name,
'names' => $names, 'names' => $names,
@ -130,7 +130,7 @@ final class CharacterTransformer extends AbstractTransformer
'person' => [ 'person' => [
'id' => $voice['person']['id'], 'id' => $voice['person']['id'],
'slug' => $voice['person']['slug'], 'slug' => $voice['person']['slug'],
'image' => $voice['person']['image']['original']['url'], 'image' => Kitsu::getImage($voice['person']),
'name' => $voice['person']['name'], 'name' => $voice['person']['name'],
], ],
'series' => [], 'series' => [],

View File

@ -57,7 +57,7 @@ final class MangaTransformer extends AbstractTransformer
if (array_key_exists($details['id'], $characters[$type])) if (array_key_exists($details['id'], $characters[$type]))
{ {
$characters[$type][$details['id']] = [ $characters[$type][$details['id']] = [
'image' => $details['image']['original']['url'], 'image' => Kitsu::getImage($details),
'name' => $details['names']['canonical'], 'name' => $details['names']['canonical'],
'slug' => $details['slug'], 'slug' => $details['slug'],
]; ];
@ -103,7 +103,7 @@ final class MangaTransformer extends AbstractTransformer
'id' => $person['id'], 'id' => $person['id'],
'slug' => $person['slug'], 'slug' => $person['slug'],
'name' => $name, 'name' => $name,
'image' => $person['image']['original']['url'], 'image' => Kitsu::getImage($person),
]; ];
usort($staff[$role], static fn ($a, $b) => $a['name'] <=> $b['name']); usort($staff[$role], static fn ($a, $b) => $a['name'] <=> $b['name']);

View File

@ -36,7 +36,7 @@ final class PersonTransformer extends AbstractTransformer
'id' => $data['id'], 'id' => $data['id'],
'name' => $canonicalName, 'name' => $canonicalName,
'birthday' => $data['birthday'], 'birthday' => $data['birthday'],
'image' => $data['image']['original']['url'], 'image' => Kitsu::getImage($data),
'names' => array_diff($data['names']['localized'], [$canonicalName]), 'names' => array_diff($data['names']['localized'], [$canonicalName]),
'description' => $data['description']['en'] ?? '', 'description' => $data['description']['en'] ?? '',
'characters' => $orgData['characters'], 'characters' => $orgData['characters'],
@ -129,7 +129,7 @@ final class PersonTransformer extends AbstractTransformer
'character' => [ 'character' => [
'id' => $character['id'], 'id' => $character['id'],
'slug' => $character['slug'], 'slug' => $character['slug'],
'image' => $character['image']['original']['url'] ?? '', 'image' => Kitsu::getImage($character),
'canonicalName' => $character['names']['canonical'], 'canonicalName' => $character['names']['canonical'],
], ],
'media' => [ 'media' => [

View File

@ -41,6 +41,8 @@ final class UserTransformer extends AbstractTransformer
return User::from([ return User::from([
'about' => $base['about'], 'about' => $base['about'],
'avatar' => $base['avatarImage']['original']['url'], 'avatar' => $base['avatarImage']['original']['url'],
'birthday' => Kitsu::formatDate($base['birthday']) . ' (' . Kitsu::friendlyTime(Kitsu::getDateDiff($base['birthday']), 'year') . ')',
'joinDate' => Kitsu::formatDate($base['createdAt']) . ' (' . Kitsu::friendlyTime(Kitsu::getDateDiff($base['createdAt']), 'day') . ')',
'favorites' => $this->organizeFavorites($favorites), 'favorites' => $this->organizeFavorites($favorites),
'location' => $base['location'], 'location' => $base['location'],
'name' => $base['name'], 'name' => $base['name'],

View File

@ -72,18 +72,18 @@ final class Kitsu
} }
$monthMap = [ $monthMap = [
'01' => 'Jan', '01' => 'January',
'02' => 'Feb', '02' => 'February',
'03' => 'Mar', '03' => 'March',
'04' => 'Apr', '04' => 'April',
'05' => 'May', '05' => 'May',
'06' => 'Jun', '06' => 'June',
'07' => 'Jul', '07' => 'July',
'08' => 'Aug', '08' => 'August',
'09' => 'Sep', '09' => 'September',
'10' => 'Oct', '10' => 'October',
'11' => 'Nov', '11' => 'November',
'12' => 'Dec', '12' => 'December',
]; ];
[$startYear, $startMonth, $startDay] = explode('-', $startDate); [$startYear, $startMonth, $startDay] = explode('-', $startDate);
@ -130,6 +130,29 @@ final class Kitsu
return MangaPublishingStatus::NOT_YET_PUBLISHED; return MangaPublishingStatus::NOT_YET_PUBLISHED;
} }
public static function formatDate(string $date): string
{
$date = new DateTimeImmutable($date);
return $date->format('F d, Y');
}
public static function getDateDiff(string $date): int
{
$now = new DateTimeImmutable();
$then = new DateTimeImmutable($date);
$interval = $now->diff($then, true);
$years = $interval->y * self::SECONDS_IN_MINUTE * self::MINUTES_IN_YEAR;
$days = $interval->d * self::SECONDS_IN_MINUTE * self::MINUTES_IN_DAY;
$hours = $interval->h * self::SECONDS_IN_MINUTE * self::MINUTES_IN_HOUR;
$minutes = $interval->i * self::SECONDS_IN_MINUTE;
$seconds = $interval->s;
return $years + $days + $hours + $minutes + $seconds;
}
/** /**
* @return array<string, string> * @return array<string, string>
*/ */
@ -335,15 +358,29 @@ final class Kitsu
/** /**
* Get the url of the posterImage from Kitsu, with fallbacks * Get the url of the posterImage from Kitsu, with fallbacks
*/ */
public static function getPosterImage(array $base, int $size = 1): string public static function getPosterImage(array $base, int $sizeId = 1): string
{ {
$rawUrl = $base['posterImage']['views'][$size]['url'] $rawUrl = $base['posterImage']['views'][$sizeId]['url']
?? $base['posterImage']['original']['url'] ?? $base['posterImage']['original']['url']
?? '/public/images/placeholder.png'; ?? '/public/images/placeholder.png';
$parts = explode('?', $rawUrl); $parts = explode('?', $rawUrl);
return (empty($parts)) ? $rawUrl : $parts[0]; return $parts[0];
}
/**
* Get the url of the image from Kitsu, with fallbacks
*/
public static function getImage(array $base, int $sizeId = 1): string
{
$rawUrl = $base['image']['original']['url']
?? $base['image']['views'][$sizeId]['url']
?? '/public/images/placeholder.png';
$parts = explode('?', $rawUrl);
return $parts[0];
} }
/** /**
@ -430,7 +467,7 @@ final class Kitsu
/** /**
* Convert a time in seconds to a more human-readable format * Convert a time in seconds to a more human-readable format
*/ */
public static function friendlyTime(int $seconds): string public static function friendlyTime(int $seconds, string $minUnit = 'second'): string
{ {
// All the seconds left // All the seconds left
$remSeconds = $seconds % self::SECONDS_IN_MINUTE; $remSeconds = $seconds % self::SECONDS_IN_MINUTE;
@ -469,6 +506,11 @@ final class Kitsu
} }
$parts[] = "{$value} {$label}"; $parts[] = "{$value} {$label}";
if ($label === $minUnit || $label === $minUnit . 's')
{
break;
}
} }
$last = array_pop($parts); $last = array_pop($parts);

View File

@ -21,6 +21,8 @@ final class User extends AbstractType
{ {
public ?string $about; public ?string $about;
public ?string $avatar; public ?string $avatar;
public ?string $birthday;
public ?string $joinDate;
public ?array $favorites; public ?array $favorites;
public ?string $location; public ?string $location;
public ?string $name; public ?string $name;