aboutsummaryrefslogtreecommitdiffhomepage
path: root/routes/timelines.php
blob: 8bd28731261375c78d105743815cd10f2202bc28 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?php

use Digitigrade\HttpResponseStatus\BadRequest;
use Digitigrade\Model\UserAccount;
use Digitigrade\Router;
use Digitigrade\Timeline\GlobalTimeline;
use Digitigrade\Timeline\HomeTimeline;
use Digitigrade\Timeline\LocalTimeline;

Router::getInstance()->mount('/feed/:kind', function (array $args) {
    /** @var \Digitigrade\Timeline\Timeline $provider */
    $provider = match ($args['kind']) {
        'global' => new GlobalTimeline(),
        'local' => new LocalTimeline(),
        'home' => new HomeTimeline(UserAccount::requireByCurrentSession())
    };
    $page = $_GET['page'] ?? 0;
    $items = $provider->getPage($page);
    if (isset($_GET['infinite'])) {
        // infinite scroll update
        if (count($items) > 0) {
            foreach ($items as $item) {
                $item->getReason()?->renderAsHtml();
                $item->getObject()->renderAsHtml();
            }
            render_template('infinite_scroll_trigger', [
                'kind' => $args['kind'],
                'isUpdate' => true,
                'nextPage' => $page + 1
            ]);
        } else {
            render_template('infinite_scroll_trigger', ['isEnd' => true]);
        }
    } else {
        // regular timeline page
        render_template('timeline', ['kind' => $args['kind'], 'items' => $items]);
    }
});

Router::getInstance()->mount('/feed/home/partial', function (array $args) {
    $user = UserAccount::requireByCurrentSession();
    if (!isset($_GET['since'])) {
        throw new BadRequest('get parameter `since` required');
    }
    $when = new \DateTimeImmutable($_GET['since']);
    $items = (new HomeTimeline($user))->getItemsSince($when);

    foreach ($items as $item) {
        $item->getReason()?->renderAsHtml();
        $item->getObject()->renderAsHtml();
    }

    render_template('live_timeline_updater', [
        'kind' => 'home',
        'isUpdate' => true,
        'since' => new \DateTimeImmutable()
    ]);
});