Version 5.1 - All the GraphQL #32
@ -1,12 +1,12 @@
|
|||||||
<main class="details">
|
<main class="details">
|
||||||
<section class="flex flex-no-wrap">
|
<section class="flex flex-no-wrap">
|
||||||
<div>
|
<div>
|
||||||
<img class="cover" width="402" height="284" src="<?= $data['image']['original'] ?>" alt="" />
|
<img class="cover" width="402" height="284" src="<?= $data['image']['original'] ?>" alt="" />
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3><?= $data['name'] ?></h3>
|
<h2><?= $data['name'] ?></h2>
|
||||||
|
|
||||||
<p><?= $data['description'] ?></p>
|
<p><?= $data['description'] ?></p>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</main>
|
</main>
|
25
app/views/me.php
Normal file
25
app/views/me.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<main class="details">
|
||||||
|
<section class="flex flex-no-wrap">
|
||||||
|
<div>
|
||||||
|
<h2><?= $attributes['name'] ?></h2>
|
||||||
|
<img src="<?= $attributes['avatar']['original'] ?>" alt="" />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<table class="media_details">
|
||||||
|
<tr>
|
||||||
|
<td>Location</td>
|
||||||
|
<td><?= $attributes['location'] ?></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<dl>
|
||||||
|
<dt>About:</dt>
|
||||||
|
<dd><?= $attributes['bio'] ?></dd>
|
||||||
|
</dl>
|
||||||
|
<pre><?= json_encode($attributes, \JSON_PRETTY_PRINT) ?></pre>
|
||||||
|
<pre><?= json_encode($relationships, \JSON_PRETTY_PRINT) ?></pre>
|
||||||
|
<pre><?= json_encode($included, \JSON_PRETTY_PRINT) ?></pre>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</main>
|
@ -111,6 +111,31 @@ class JsonAPI {
|
|||||||
|
|
||||||
return $organized;
|
return $organized;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function lightlyOrganizeIncludes(array $includes): array
|
||||||
|
{
|
||||||
|
$organized = [];
|
||||||
|
|
||||||
|
foreach($includes as $item)
|
||||||
|
{
|
||||||
|
$type = $item['type'];
|
||||||
|
$id = $item['id'];
|
||||||
|
$organized[$type] = $organized[$type] ?? [];
|
||||||
|
$newItem = [];
|
||||||
|
|
||||||
|
foreach(['attributes', 'relationships'] as $key)
|
||||||
|
{
|
||||||
|
if (array_key_exists($key, $item))
|
||||||
|
{
|
||||||
|
$newItem[$key] = $item[$key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$organized[$type][$id] = $newItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $organized;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reorganize relationship mappings to make them simpler to use
|
* Reorganize relationship mappings to make them simpler to use
|
||||||
|
@ -139,12 +139,18 @@ class Model {
|
|||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get profile information for the configured user
|
||||||
|
*
|
||||||
|
* @param string $username
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
public function getUserData(string $username): array
|
public function getUserData(string $username): array
|
||||||
{
|
{
|
||||||
$userId = $this->getUserIdByUsername($username);
|
$userId = $this->getUserIdByUsername($username);
|
||||||
$data = $this->getRequest("/users/{$userId}", [
|
$data = $this->getRequest("/users/{$userId}", [
|
||||||
'query' => [
|
'query' => [
|
||||||
'include' => 'waifu,pinnedPost,blocks,linkedAccounts,profileLinks,mediaFollows,userRoles'
|
'include' => 'waifu,pinnedPost,blocks,linkedAccounts,profileLinks,profileLinks.profileLinkSite,mediaFollows,userRoles'
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
// $data['included'] = JsonAPI::organizeIncludes($data['included']);
|
// $data['included'] = JsonAPI::organizeIncludes($data['included']);
|
||||||
|
@ -20,6 +20,7 @@ use const Aviat\AnimeClient\SESSION_SEGMENT;
|
|||||||
|
|
||||||
use function Aviat\AnimeClient\_dir;
|
use function Aviat\AnimeClient\_dir;
|
||||||
|
|
||||||
|
use Aviat\AnimeClient\API\JsonAPI;
|
||||||
use Aviat\Ion\Di\{ContainerAware, ContainerInterface};
|
use Aviat\Ion\Di\{ContainerAware, ContainerInterface};
|
||||||
use Aviat\Ion\View\{HtmlView, HttpView, JsonView};
|
use Aviat\Ion\View\{HtmlView, HttpView, JsonView};
|
||||||
use InvalidArgumentException;
|
use InvalidArgumentException;
|
||||||
@ -127,7 +128,14 @@ class Controller {
|
|||||||
{
|
{
|
||||||
$username = $this->config->get(['kitsu_username']);
|
$username = $this->config->get(['kitsu_username']);
|
||||||
$model = $this->container->get('kitsu-model');
|
$model = $this->container->get('kitsu-model');
|
||||||
$this->outputJSON($model->getUserData($username));
|
$data = $model->getUserData($username);
|
||||||
|
$included = JsonAPI::lightlyOrganizeIncludes($data['included']);
|
||||||
|
$this->outputHTML('me', [
|
||||||
|
'title' => 'About' . $this->config->get('whose_list'),
|
||||||
|
'attributes' => $data['data']['attributes'],
|
||||||
|
'relationships' => $data['data']['relationships'],
|
||||||
|
'included' => $included
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -39,7 +39,8 @@ class Util {
|
|||||||
'login',
|
'login',
|
||||||
'logout',
|
'logout',
|
||||||
'details',
|
'details',
|
||||||
'character'
|
'character',
|
||||||
|
'me'
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -234,6 +234,7 @@ class DispatcherTest extends AnimeClientTestCase {
|
|||||||
'anime' => 'Aviat\AnimeClient\Controller\Anime',
|
'anime' => 'Aviat\AnimeClient\Controller\Anime',
|
||||||
'manga' => 'Aviat\AnimeClient\Controller\Manga',
|
'manga' => 'Aviat\AnimeClient\Controller\Manga',
|
||||||
'collection' => 'Aviat\AnimeClient\Controller\Collection',
|
'collection' => 'Aviat\AnimeClient\Controller\Collection',
|
||||||
|
'character' => 'Aviat\AnimeClient\Controller\Character',
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
'empty_controller_list' => [
|
'empty_controller_list' => [
|
||||||
@ -255,6 +256,7 @@ class DispatcherTest extends AnimeClientTestCase {
|
|||||||
'anime' => 'Aviat\AnimeClient\Controller\Anime',
|
'anime' => 'Aviat\AnimeClient\Controller\Anime',
|
||||||
'manga' => 'Aviat\AnimeClient\Controller\Manga',
|
'manga' => 'Aviat\AnimeClient\Controller\Manga',
|
||||||
'collection' => 'Aviat\AnimeClient\Controller\Collection',
|
'collection' => 'Aviat\AnimeClient\Controller\Collection',
|
||||||
|
'character' => 'Aviat\AnimeClient\Controller\Character',
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
Loading…
Reference in New Issue
Block a user