Ver código fonte

Add user listing and viewing

staging
Christopher Ross Hind 3 anos atrás
pai
commit
ad4c9ce573
7 arquivos alterados com 166 adições e 7 exclusões
  1. +22
    -3
      app/Http/Controllers/UserController.php
  2. +14
    -3
      app/Knockout/Dataset.php
  3. +55
    -0
      app/Knockout/User.php
  4. +23
    -0
      resources/views/page/user.blade.php
  5. +34
    -0
      resources/views/page/users.blade.php
  6. +12
    -0
      resources/views/partial/user.blade.php
  7. +6
    -1
      routes/web.php

+ 22
- 3
app/Http/Controllers/UserController.php Ver arquivo

@@ -3,13 +3,32 @@
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Knockout\Event;
use App\Knockout\User;

class UserController extends Controller {

public function get()
public function all(Request $request)
{
return 'not implemented';
$page = $request->route('page', 0);
$query = $request->get('query', '');

$users = User::all($page, $query);

return view('page/users', [
'query' => $query,
'users' => $users->getRecords(),
'paginator' => $users->getPaginator($request)
]);
}

public function one(Request $request)
{
$userId = $request->route('user', null);
$user = User::one($userId);

return view('page/user', [
'user' => $user->getRecord()
]);
}

public function posts()


+ 14
- 3
app/Knockout/Dataset.php Ver arquivo

@@ -69,7 +69,17 @@ class Dataset
{
$exactPages = ($this->totalRecords / $this->recordsPerPage);
$pages = ceil($exactPages);
return ($pages == $exactPages) ? floor($exactPages) : $pages;
$pages = ($pages == $exactPages) ? floor($exactPages) : $pages;
return ($pages < 1) ? 1 : $pages;
}

private function queryParams(array $query)
{
$output = [];
foreach ($query as $key => $item) {
$output[] = sprintf('%s=%s', $key, urlencode($item));
}
return '?' . implode('&', $output);
}

public function getPaginator(Request $request)
@@ -79,15 +89,16 @@ class Dataset
if (is_null($this->recordsPerPage)) return null;

$route = $request->route();
$query = $request->query();
$alias = $route[1]['as'] ?? 'index';
$params = $route[2] ?? [];

$pages = array_map(function($page) use($alias, $params) {
$pages = array_map(function($page) use($alias, $params, $query) {
$currentPage = $params['page'] ?? 1;
return (object) [
'number' => $page,
'active' => ($page == $currentPage),
'link' => route($alias, array_merge($params, ['page' => $page]))
'link' => route($alias, array_merge($params, ['page' => $page])) //. $this->queryParams($query)
];
}, range(1, $this->getPageCount()));



+ 55
- 0
app/Knockout/User.php Ver arquivo

@@ -23,4 +23,59 @@ class User {
return $s;
}

private static function requestAll(int $page = 0, string $query = ''): Dataset
{
$path = ['/users/'];
if ($page > 0) $path[] = $page;
$data = (new AbstractData)->httpGet(implode('', $path), ['filter' => $query]);
$json = json_decode($data);
$records = array_map(function($user) {
return self::unwrap($user);
}, $json->users);
return (new Dataset($records))
->setTotalRecords($json->totalUsers)
->setCurrentPage($page)
->setRecordsPerPage(40);
}

public static function updateAll(int $page = 0, string $query = ''): Dataset
{
$key = sprintf('users-%u-%s', $page, $query);
$data = self::requestAll($page, $query);
Cache::put($key, $data, 3600);
return $data;
}

public static function all(int $page = 0, string $query = ''): Dataset
{
$key = sprintf('users-%u-%s', $page, $query);
return Cache::get($key, function() use($page, $query) {
return self::updateAll($page, $query);
});
}

private static function requestOne(int $userId): Dataset
{
$data = (new AbstractData)->httpGet(sprintf('/user/%s', $userId));
$json = json_decode($data);
$record = self::unwrap($json);
return (new Dataset($record));
}

public static function updateOne(int $userId): Dataset
{
$key = sprintf('user-%u', $userId);
$data = self::requestOne($userId);
Cache::put($key, $data, 3600);
return $data;
}

public static function one(int $userId): Dataset
{
$key = sprintf('user-%u', $userId);
return Cache::get($key, function() use($userId) {
return self::updateOne($userId);
});
}

}

+ 23
- 0
resources/views/page/user.blade.php Ver arquivo

@@ -0,0 +1,23 @@
@extends('default')

@section('title', $user->username)

@section('breadcrumb')
<a href="{{ route('index') }}">Home</a>
<a>></a>
<a href="{{ route('users') }}">Users</a>
<a>></a>
<a href="{{ route('user', ['user' => $user->id]) }}">{{ $user->username }}</a>
@endsection

@section('content')
@include('partial/user');
<div class="row spacer"></div>
<div class="row">
<p>Will add bios later, probably</p>
</div>
@endsection

@section('scripts')
<link rel='stylesheet' type='text/css' href='/css/page/user.css'/>
@endsection

+ 34
- 0
resources/views/page/users.blade.php Ver arquivo

@@ -0,0 +1,34 @@
@extends('default')

@section('title', 'Users')

@section('breadcrumb')
<a href="{{ route('index') }}">Home</a>
<a>></a>
<a href="{{ route('users') }}">Users</a>
@endsection

@section('content')
<div class="row search input">
<form class="querybox" method="get">
<div class="inputwrapper">
<input type="text" name="query" value="{{ $query }}" placeholder="User Search">
</div>
<div class="buttonwrapper">
<input type="submit" value="Search">
</div>
</form>
</div>
<div class="row spacer"></div>
{!! $paginator !!}
@foreach($users as $user)
@include('partial/user')
<div class="row spacer"></div>
@endforeach
{!! $paginator !!}
@endsection

@section('scripts')
<link rel='stylesheet' type='text/css' href='/css/page/user.css'/>
<link rel='stylesheet' type='text/css' href='/css/page/search.css'/>
@endsection

+ 12
- 0
resources/views/partial/user.blade.php Ver arquivo

@@ -0,0 +1,12 @@
<div class="row userInfo">
<div class="userBackground">
<img src="{{ $user->background }}">
</div>
<div class="userForeground">
<img class="avatar" src="{{ $user->avatar }}">
<a class="username">{{ $user->username }}</a>
<a class="link" href="{{ route('user.bans', ['user' => $user->id]) }}">Bans</a>
<a class="link" href="{{ route('user.threads', ['user' => $user->id]) }}">Threads</a>
<a class="link" href="{{ route('user.posts', ['user' => $user->id]) }}">Posts</a>
</div>
</div>

+ 6
- 1
routes/web.php Ver arquivo

@@ -53,9 +53,14 @@ $router->get('/events', [
]);

// user profile
$router->get('/users[/{page}]', [
'as' => 'users',
'uses' => 'UserController@all'
]);

$router->get('/user/{user}', [
'as' => 'user',
'uses' => 'UserController@get'
'uses' => 'UserController@one'
]);

$router->get('/user/{user}/posts', [


Carregando…
Cancelar
Salvar