Sfoglia il codice sorgente

Add user post listing

staging
Christopher Ross Hind 3 anni fa
parent
commit
858cb7c802
5 ha cambiato i file con 72 aggiunte e 6 eliminazioni
  1. +1
    -1
      app/BbCode/Tag/Image.php
  2. +13
    -2
      app/Http/Controllers/UserController.php
  3. +30
    -0
      app/Knockout/Post.php
  4. +25
    -0
      resources/views/page/user-posts.blade.php
  5. +3
    -3
      routes/web.php

+ 1
- 1
app/BbCode/Tag/Image.php Vedi File

@@ -12,7 +12,7 @@ class Image implements TagInterface
{
$link = $tokenTag->getText();
if (!preg_match('!^https?://[a-z0-9\-@:.,_&+%#?/=]+$!i', $link)) {
$unknownTag = new UnknownSimpleType();
$unknownTag = new Unknown();
return $unknownTag->format($tokenTag);
}



+ 13
- 2
app/Http/Controllers/UserController.php Vedi File

@@ -2,6 +2,7 @@

namespace App\Http\Controllers;

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

@@ -31,9 +32,19 @@ class UserController extends Controller {
]);
}

public function posts()
public function posts(Request $request)
{
return 'not implemented';
$userId = $request->route('user', null);
$page = $request->route('page', 1);

$user = User::one($userId);
$posts = Post::all($userId, $page);

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

public function threads()


+ 30
- 0
app/Knockout/Post.php Vedi File

@@ -4,6 +4,7 @@ namespace App\Knockout;

use App\Helper\BBCode;
use Carbon\Carbon;
use Illuminate\Support\Facades\Cache;

class Post {

@@ -37,6 +38,35 @@ class Post {
return $s;
}

private static function requestAll(int $userId, int $page = 1): Dataset
{
$data = (new AbstractData)->httpGet(sprintf('/user/%u/posts/%u', $userId, $page));
$json = json_decode($data);
$records = array_map(function($user) {
return self::unwrap($user);
}, $json->posts);
return (new Dataset($records))
->setTotalRecords($json->totalPosts)
->setCurrentPage($page)
->setRecordsPerPage(40);
}

public static function updateAll(int $userId, int $page = 0): Dataset
{
$key = sprintf('user-posts-%u-%u', $userId, $page);
$data = self::requestAll($userId, $page);
Cache::put($key, $data, 300);
return $data;
}

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

public function dateDiff()
{
return Carbon::createFromFormat('d/m/Y H:i', $this->date)->diffForHumans();


+ 25
- 0
resources/views/page/user-posts.blade.php Vedi File

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

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

@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>
<a>></a>
<a href="{{ route('user.posts', ['user' => $user->id]) }}">Posts</a>
@endsection

@section('content')
{!! $paginator !!}
@foreach($posts as $post)
@include('partial/post')
@endforeach
{!! $paginator !!}
@endsection

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

+ 3
- 3
routes/web.php Vedi File

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

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

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

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


Loading…
Annulla
Salva