Merge branch 'starred' of git://github.com/MonsieurPaulLeBoulanger/miniflux into starred
This commit is contained in:
commit
40b4c00124
@ -1 +0,0 @@
|
|||||||
Deny from all
|
|
60
index.php
60
index.php
@ -103,6 +103,16 @@ Router\get_action('show', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
Router\get_action('show_starred_item', function() {
|
||||||
|
$id = Model\decode_item_id(Request\param('id'));
|
||||||
|
|
||||||
|
Response\html(Template\layout('starred_item', array(
|
||||||
|
'item' => Model\get_item($id)
|
||||||
|
)));
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Router\get_action('read', function() {
|
Router\get_action('read', function() {
|
||||||
|
|
||||||
$id = Model\decode_item_id(Request\param('id'));
|
$id = Model\decode_item_id(Request\param('id'));
|
||||||
@ -118,11 +128,26 @@ Router\get_action('read', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
Router\get_action('read_starred', function() {
|
||||||
|
|
||||||
|
$id = Model\decode_item_id(Request\param('id'));
|
||||||
|
$item = Model\get_item($id);
|
||||||
|
$nav = Model\get_nav_starred_item($item); // must be placed before set_item_read()
|
||||||
|
|
||||||
|
Model\set_item_read($id);
|
||||||
|
|
||||||
|
Response\html(Template\layout('starred_item', array(
|
||||||
|
'item' => $item,
|
||||||
|
'item_nav' => $nav
|
||||||
|
)));
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
Router\get_action('mark-item-read', function() {
|
Router\get_action('mark-item-read', function() {
|
||||||
|
|
||||||
$id = Model\decode_item_id(Request\param('id'));
|
$id = Model\decode_item_id(Request\param('id'));
|
||||||
Model\set_item_read($id);
|
Model\set_item_read($id);
|
||||||
Response\Redirect('?action=default');
|
Response\Redirect('?action='.$_SESSION['MODE']);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@ -130,7 +155,7 @@ Router\get_action('mark-item-unread', function() {
|
|||||||
|
|
||||||
$id = Model\decode_item_id(Request\param('id'));
|
$id = Model\decode_item_id(Request\param('id'));
|
||||||
Model\set_item_unread($id);
|
Model\set_item_unread($id);
|
||||||
Response\Redirect('?action=history');
|
Response\Redirect('?action='.$_SESSION['MODE']);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@ -138,7 +163,7 @@ Router\get_action('mark-item-removed', function() {
|
|||||||
|
|
||||||
$id = Model\decode_item_id(Request\param('id'));
|
$id = Model\decode_item_id(Request\param('id'));
|
||||||
Model\set_item_removed($id);
|
Model\set_item_removed($id);
|
||||||
Response\Redirect('?action=history');
|
Response\Redirect('?action='.$_SESSION['MODE']);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@ -158,6 +183,22 @@ Router\post_action('mark-item-unread', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
Router\get_action('mark-item-starred', function() {
|
||||||
|
|
||||||
|
$id = Model\decode_item_id(Request\param('id'));
|
||||||
|
Model\set_item_starred($id);
|
||||||
|
Response\Redirect('?action='.$_SESSION['MODE']);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
Router\get_action('mark-item-unstarred', function() {
|
||||||
|
|
||||||
|
$id = Model\decode_item_id(Request\param('id'));
|
||||||
|
Model\set_item_unstarred($id);
|
||||||
|
Response\Redirect('?action='.$_SESSION['MODE']);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
Router\post_action('change-item-status', function() {
|
Router\post_action('change-item-status', function() {
|
||||||
|
|
||||||
$id = Model\decode_item_id(Request\param('id'));
|
$id = Model\decode_item_id(Request\param('id'));
|
||||||
@ -170,7 +211,7 @@ Router\post_action('change-item-status', function() {
|
|||||||
|
|
||||||
|
|
||||||
Router\get_action('history', function() {
|
Router\get_action('history', function() {
|
||||||
|
$_SESSION['MODE']='history';
|
||||||
Response\html(Template\layout('history', array(
|
Response\html(Template\layout('history', array(
|
||||||
'items' => Model\get_read_items(),
|
'items' => Model\get_read_items(),
|
||||||
'menu' => 'history'
|
'menu' => 'history'
|
||||||
@ -178,6 +219,16 @@ Router\get_action('history', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
Router\get_action('starred', function() {
|
||||||
|
$_SESSION['MODE']='starred';
|
||||||
|
Response\html(Template\layout('starred', array(
|
||||||
|
'items' => Model\get_starred_items(),
|
||||||
|
'menu' => 'starred'
|
||||||
|
)));
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Router\get_action('confirm-remove', function() {
|
Router\get_action('confirm-remove', function() {
|
||||||
|
|
||||||
$id = Request\int_param('feed_id');
|
$id = Request\int_param('feed_id');
|
||||||
@ -390,6 +441,7 @@ Router\post_action('config', function() {
|
|||||||
|
|
||||||
|
|
||||||
Router\notfound(function() {
|
Router\notfound(function() {
|
||||||
|
$_SESSION['MODE']='default';
|
||||||
|
|
||||||
Model\autoflush();
|
Model\autoflush();
|
||||||
|
|
||||||
|
@ -9,6 +9,11 @@ return array(
|
|||||||
'French' => 'Français',
|
'French' => 'Français',
|
||||||
'English' => 'Anglais',
|
'English' => 'Anglais',
|
||||||
'unread' => 'non lus',
|
'unread' => 'non lus',
|
||||||
|
'mark as starred' => 'ajouter aux favoris',
|
||||||
|
'mark as unstarred' => 'supprimer des favoris',
|
||||||
|
'starred' => 'favoris',
|
||||||
|
'No starred items' => 'Pas de favoris',
|
||||||
|
'Starred' => 'Favoris',
|
||||||
'history' => 'historique',
|
'history' => 'historique',
|
||||||
'subscriptions' => 'abonnements',
|
'subscriptions' => 'abonnements',
|
||||||
'Subscriptions' => 'Abonnements',
|
'Subscriptions' => 'Abonnements',
|
||||||
|
69
model.php
69
model.php
@ -254,7 +254,7 @@ function get_unread_items()
|
|||||||
{
|
{
|
||||||
return \PicoTools\singleton('db')
|
return \PicoTools\singleton('db')
|
||||||
->table('items')
|
->table('items')
|
||||||
->columns('items.id', 'items.title', 'items.updated', 'items.url', 'feeds.site_url', 'items.content')
|
->columns('items.id', 'items.title', 'items.updated', 'items.url', 'feeds.site_url', 'items.content','starred')
|
||||||
->join('feeds', 'id', 'feed_id')
|
->join('feeds', 'id', 'feed_id')
|
||||||
->eq('status', 'unread')
|
->eq('status', 'unread')
|
||||||
->desc('updated')
|
->desc('updated')
|
||||||
@ -266,11 +266,25 @@ function get_read_items()
|
|||||||
{
|
{
|
||||||
return \PicoTools\singleton('db')
|
return \PicoTools\singleton('db')
|
||||||
->table('items')
|
->table('items')
|
||||||
->columns('items.id', 'items.title', 'items.updated', 'items.url', 'feeds.site_url')
|
->columns('items.id', 'items.title', 'items.updated', 'items.url', 'feeds.site_url','starred')
|
||||||
->join('feeds', 'id', 'feed_id')
|
->join('feeds', 'id', 'feed_id')
|
||||||
->eq('status', 'read')
|
->eq('status', 'read')
|
||||||
->desc('updated')
|
->desc('updated')
|
||||||
->findAll();
|
->findAll();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function get_starred_items()
|
||||||
|
{
|
||||||
|
return \PicoTools\singleton('db')
|
||||||
|
->table('items')
|
||||||
|
->columns('items.id', 'items.title', 'items.updated', 'items.url', 'feeds.site_url')
|
||||||
|
->join('feeds', 'id', 'feed_id')
|
||||||
|
->eq('starred', 'starred')
|
||||||
|
->desc('updated')
|
||||||
|
->findAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -312,12 +326,41 @@ function get_nav_item($item)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function get_nav_starred_item($item)
|
||||||
|
{
|
||||||
|
$starred_items = \PicoTools\singleton('db')
|
||||||
|
->table('items')
|
||||||
|
->columns('items.id')
|
||||||
|
->eq('starred', 'starred')
|
||||||
|
->desc('updated')
|
||||||
|
->findAll();
|
||||||
|
|
||||||
|
$next_item = null;
|
||||||
|
$previous_item = null;
|
||||||
|
|
||||||
|
for ($i = 0, $ilen = count($starred_items); $i < $ilen; $i++) {
|
||||||
|
|
||||||
|
if ($starred_items[$i]['id'] == $item['id']) {
|
||||||
|
|
||||||
|
if ($i > 0) $previous_item = $starred_items[$i - 1];
|
||||||
|
if ($i < ($ilen - 1)) $next_item = $starred_items[$i + 1];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'next' => $next_item,
|
||||||
|
'previous' => $previous_item
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function set_item_removed($id)
|
function set_item_removed($id)
|
||||||
{
|
{
|
||||||
\PicoTools\singleton('db')
|
\PicoTools\singleton('db')
|
||||||
->table('items')
|
->table('items')
|
||||||
->eq('id', $id)
|
->eq('id', $id)
|
||||||
->save(array('status' => 'removed'));
|
->save(array('status' => 'removed','starred' => 'unstarred'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -339,6 +382,25 @@ function set_item_unread($id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function set_item_starred($id)
|
||||||
|
{
|
||||||
|
\PicoTools\singleton('db')
|
||||||
|
->table('items')
|
||||||
|
->eq('id', $id)
|
||||||
|
->save(array('starred' => 'starred'));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function set_item_unstarred($id)
|
||||||
|
{
|
||||||
|
\PicoTools\singleton('db')
|
||||||
|
->table('items')
|
||||||
|
->eq('id', $id)
|
||||||
|
->save(array('starred' => 'unstarred'));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function switch_item_status($id)
|
function switch_item_status($id)
|
||||||
{
|
{
|
||||||
$item = \PicoTools\singleton('db')
|
$item = \PicoTools\singleton('db')
|
||||||
@ -397,6 +459,7 @@ function autoflush()
|
|||||||
\PicoTools\singleton('db')
|
\PicoTools\singleton('db')
|
||||||
->table('items')
|
->table('items')
|
||||||
->eq('status', 'read')
|
->eq('status', 'read')
|
||||||
|
->eq('starred', 'starred')
|
||||||
->lt('updated', strtotime('-'.$autoflush.'day'))
|
->lt('updated', strtotime('-'.$autoflush.'day'))
|
||||||
->save(array('status' => 'removed'));
|
->save(array('status' => 'removed'));
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,11 @@
|
|||||||
|
|
||||||
namespace Schema;
|
namespace Schema;
|
||||||
|
|
||||||
|
function version_7($pdo)
|
||||||
|
{
|
||||||
|
$pdo->exec('ALTER TABLE items ADD COLUMN starred TEXT');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function version_7($pdo)
|
function version_7($pdo)
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
@ -19,6 +20,7 @@
|
|||||||
<a class="logo" href="?">mini<span>flux</span></a>
|
<a class="logo" href="?">mini<span>flux</span></a>
|
||||||
<ul>
|
<ul>
|
||||||
<li <?= isset($menu) && $menu === 'unread' ? 'class="active"' : '' ?>><a href="?action=default"><?= t('unread') ?></a></li>
|
<li <?= isset($menu) && $menu === 'unread' ? 'class="active"' : '' ?>><a href="?action=default"><?= t('unread') ?></a></li>
|
||||||
|
<li <?= isset($menu) && $menu === 'starred' ? 'class="active"' : '' ?>><a href="?action=starred"><?= t('starred') ?></a></li>
|
||||||
<li <?= isset($menu) && $menu === 'history' ? 'class="active"' : '' ?>><a href="?action=history"><?= t('history') ?></a></li>
|
<li <?= isset($menu) && $menu === 'history' ? 'class="active"' : '' ?>><a href="?action=history"><?= t('history') ?></a></li>
|
||||||
<li <?= isset($menu) && $menu === 'feeds' ? 'class="active"' : '' ?>><a href="?action=feeds"><?= t('subscriptions') ?></a></li>
|
<li <?= isset($menu) && $menu === 'feeds' ? 'class="active"' : '' ?>><a href="?action=feeds"><?= t('subscriptions') ?></a></li>
|
||||||
<li <?= isset($menu) && $menu === 'config' ? 'class="active"' : '' ?>><a href="?action=config"><?= t('preferences') ?></a></li>
|
<li <?= isset($menu) && $menu === 'config' ? 'class="active"' : '' ?>><a href="?action=config"><?= t('preferences') ?></a></li>
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
<?php if (empty($items)): ?>
|
<?php if (empty($items)): ?>
|
||||||
|
|
||||||
<p class="alert alert-info"><?= t('No history') ?></p>
|
<p class="alert alert-info"><?= t('No history') ?></p>
|
||||||
|
|
||||||
<?php else: ?>
|
<?php else: ?>
|
||||||
@ -24,8 +23,18 @@
|
|||||||
</a>
|
</a>
|
||||||
</h2>
|
</h2>
|
||||||
<p>
|
<p>
|
||||||
|
|
||||||
<?= Helper\get_host_from_url($item['url']) ?> |
|
<?= Helper\get_host_from_url($item['url']) ?> |
|
||||||
<?= dt('%A %e %B %Y %k:%M', $item['updated']) ?> |
|
<?= dt('%A %e %B %Y %k:%M', $item['updated']) ?> |
|
||||||
|
|
||||||
|
|
||||||
|
<?php if (isset($item['starred']) && $item['starred']=='starred'): ?>
|
||||||
|
<a href="?action=mark-item-unstarred&id=<?= $item_id ?>"><?= t('mark as unstarred') ?></a> |
|
||||||
|
<?php else: ?>
|
||||||
|
<a href="?action=mark-item-starred&id=<?= $item_id ?>"><?= t('mark as starred') ?></a> |
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
|
||||||
<a href="?action=mark-item-unread&id=<?= $item_id ?>"><?= t('mark as unread') ?></a> |
|
<a href="?action=mark-item-unread&id=<?= $item_id ?>"><?= t('mark as unread') ?></a> |
|
||||||
<a href="?action=mark-item-removed&id=<?= $item_id ?>"><?= t('remove') ?></a> |
|
<a href="?action=mark-item-removed&id=<?= $item_id ?>"><?= t('remove') ?></a> |
|
||||||
<a
|
<a
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
<p class="alert alert-info"><?= t('Item not found') ?></p>
|
<p class="alert alert-info"><?= t('Item not found') ?></p>
|
||||||
|
|
||||||
<?php else: ?>
|
<?php else: ?>
|
||||||
|
<?php $item_id = Model\encode_item_id($item['id']) ?>
|
||||||
<article class="item" id="current-item" data-item-id="<?= Model\encode_item_id($item['id']) ?>">
|
<article class="item" id="current-item" data-item-id="<?= Model\encode_item_id($item['id']) ?>">
|
||||||
<h1>
|
<h1>
|
||||||
<a href="<?= $item['url'] ?>" rel="noreferrer" target="_blank" id="original-item"><?= Helper\escape($item['title']) ?></a>
|
<a href="<?= $item['url'] ?>" rel="noreferrer" target="_blank" id="original-item"><?= Helper\escape($item['title']) ?></a>
|
||||||
@ -10,7 +11,13 @@
|
|||||||
|
|
||||||
<p class="infos">
|
<p class="infos">
|
||||||
<?= Helper\get_host_from_url($item['url']) ?> |
|
<?= Helper\get_host_from_url($item['url']) ?> |
|
||||||
<?= dt('%A %e %B %Y %k:%M', $item['updated']) ?>
|
<?= dt('%A %e %B %Y %k:%M', $item['updated']) ?> |
|
||||||
|
<?php if (isset($item['starred']) && $item['starred']=='starred'): ?>
|
||||||
|
<a href="?action=mark-item-unstarred&id=<?= $item_id ?>"><?= t('mark as unstarred') ?></a>
|
||||||
|
<?php else: ?>
|
||||||
|
<a href="?action=mark-item-starred&id=<?= $item_id ?>"><?= t('mark as starred') ?></a>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<?= $item['content'] ?>
|
<?= $item['content'] ?>
|
||||||
|
42
templates/starred.php
Normal file
42
templates/starred.php
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<?php if (empty($items)): ?>
|
||||||
|
|
||||||
|
<p class="alert alert-info"><?= t('No starred items') ?></p>
|
||||||
|
|
||||||
|
<?php else: ?>
|
||||||
|
|
||||||
|
<div class="page-header">
|
||||||
|
<h2><?= t('Starred') ?></h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<section class="items" id="listing">
|
||||||
|
<?php foreach ($items as $item): ?>
|
||||||
|
<?php $item_id = Model\encode_item_id($item['id']) ?>
|
||||||
|
<article id="item-<?= $item_id ?>" data-item-id="<?= $item_id ?>">
|
||||||
|
<h2>
|
||||||
|
<a
|
||||||
|
href="?action=read_starred&id=<?= $item_id ?>"
|
||||||
|
id="open-<?= $item_id ?>"
|
||||||
|
>
|
||||||
|
<?= Helper\escape($item['title']) ?>
|
||||||
|
</a>
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
<?= Helper\get_host_from_url($item['url']) ?> |
|
||||||
|
<?= dt('%A %e %B %Y %k:%M', $item['updated']) ?> |
|
||||||
|
<a href="?action=mark-item-unstarred&id=<?= $item_id ?>"><?= t('mark as unstarred') ?></a> |
|
||||||
|
<a href="?action=mark-item-removed&id=<?= $item_id ?>"><?= t('remove') ?></a> |
|
||||||
|
<a
|
||||||
|
href="<?= $item['url'] ?>"
|
||||||
|
id="original-<?= $item_id ?>"
|
||||||
|
rel="noreferrer"
|
||||||
|
target="_blank"
|
||||||
|
data-item-id="<?= $item_id ?>"
|
||||||
|
>
|
||||||
|
<?= t('original link') ?>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
</article>
|
||||||
|
<?php endforeach ?>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<?php endif ?>
|
44
templates/starred_item.php
Normal file
44
templates/starred_item.php
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<?php if (empty($item)): ?>
|
||||||
|
|
||||||
|
<p class="alert alert-info"><?= t('Item not found') ?></p>
|
||||||
|
|
||||||
|
<?php else: ?>
|
||||||
|
<article class="item" id="current-item" data-item-id="<?= Model\encode_item_id($item['id']) ?>">
|
||||||
|
<h1>
|
||||||
|
<a href="<?= $item['url'] ?>" rel="noreferrer" target="_blank" id="original-item"><?= Helper\escape($item['title']) ?></a>
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<p class="infos">
|
||||||
|
<?= Helper\get_host_from_url($item['url']) ?> |
|
||||||
|
<?= dt('%A %e %B %Y %k:%M', $item['updated']) ?> |
|
||||||
|
<a href="?action=mark-item-unstarred&id=<?= $item_id ?>"><?= t('mark as unstarred') ?></a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<?= $item['content'] ?>
|
||||||
|
|
||||||
|
<?php if (isset($item_nav)): ?>
|
||||||
|
<nav>
|
||||||
|
<span class="nav-left">
|
||||||
|
<?php if ($item_nav['previous']): ?>
|
||||||
|
<a href="?action=read_starred&id=<?= Model\encode_item_id($item_nav['previous']['id']) ?>" id="previous-item">« <?= t('Previous') ?></a>
|
||||||
|
<?php else: ?>
|
||||||
|
« <?= t('Previous') ?>
|
||||||
|
<?php endif ?>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<span class="nav-middle">
|
||||||
|
<a href="?action=starred"><?= t('Starred') ?></a>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<span class="nav-right">
|
||||||
|
<?php if ($item_nav['next']): ?>
|
||||||
|
<a href="?action=read_starred&id=<?= Model\encode_item_id($item_nav['next']['id']) ?>" id="next-item"><?= t('Next') ?> »</a>
|
||||||
|
<?php else: ?>
|
||||||
|
<?= t('Next') ?> »
|
||||||
|
<?php endif ?>
|
||||||
|
</span>
|
||||||
|
</nav>
|
||||||
|
<?php endif ?>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<?php endif ?>
|
@ -28,6 +28,14 @@
|
|||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<?= Helper\get_host_from_url($item['url']) ?> |
|
<?= Helper\get_host_from_url($item['url']) ?> |
|
||||||
|
|
||||||
|
|
||||||
|
<?php if (isset($item['starred']) && $item['starred']=='starred'): ?>
|
||||||
|
<a href="?action=mark-item-unstarred&id=<?= $item_id ?>"><?= t('mark as unstarred') ?></a> |
|
||||||
|
<?php else: ?>
|
||||||
|
<a href="?action=mark-item-starred&id=<?= $item_id ?>"><?= t('mark as starred') ?></a> |
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
<a href="?action=mark-item-read&id=<?= $item_id ?>"><?= t('mark as read') ?></a> |
|
<a href="?action=mark-item-read&id=<?= $item_id ?>"><?= t('mark as read') ?></a> |
|
||||||
<a
|
<a
|
||||||
href="<?= $item['url'] ?>"
|
href="<?= $item['url'] ?>"
|
||||||
|
Loading…
Reference in New Issue
Block a user