Remove old views
This commit is contained in:
parent
b4cfb8d3b6
commit
7f2f22f156
|
@ -2,32 +2,12 @@
|
|||
# Copyright (C) 2017-2019 by BDE ENS Paris-Saclay
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
from django import forms
|
||||
from django.forms import ModelForm
|
||||
|
||||
from .models import Jeu, Emprunt
|
||||
|
||||
|
||||
class JeuForm(ModelForm):
|
||||
class Meta:
|
||||
model = Jeu
|
||||
fields = '__all__'
|
||||
|
||||
def clean_nombre_joueurs_max(self):
|
||||
max_player = self.cleaned_data['nombre_joueurs_max']
|
||||
if max_player < self.cleaned_data['nombre_joueurs_min']:
|
||||
raise forms.ValidationError("Max ne peut être inférieur à min")
|
||||
return max_player
|
||||
from .models import Emprunt
|
||||
|
||||
|
||||
class EmpruntForm(ModelForm):
|
||||
class Meta:
|
||||
model = Emprunt
|
||||
fields = ['media']
|
||||
|
||||
|
||||
class EditEmpruntForm(ModelForm):
|
||||
class Meta:
|
||||
model = Emprunt
|
||||
fields = ['media', 'permanencier_emprunt', 'permanencier_rendu',
|
||||
'date_rendu']
|
||||
|
|
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-08-08 18:54+0200\n"
|
||||
"POT-Creation-Date: 2019-08-09 22:25+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
@ -116,3 +116,7 @@ msgstr "Pas d'emprunts en cours."
|
|||
#: templates/media/index.html:77
|
||||
msgid "You are not logged in."
|
||||
msgstr "Vous n'êtes pas identifié."
|
||||
|
||||
#: templates/media/media.html:37
|
||||
msgid "Save"
|
||||
msgstr "Enregistrer"
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
{% comment %}
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
{% endcomment %}
|
||||
|
||||
{% if auteurs_list.paginator %}
|
||||
{% include "pagination.html" with list=auteurs_list %}
|
||||
{% endif %}
|
||||
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Nom</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for auteur in auteurs_list %}
|
||||
<tr>
|
||||
<td>{{ auteur.nom }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
|
@ -1,44 +0,0 @@
|
|||
{% comment %}
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
{% endcomment %}
|
||||
|
||||
{% if emprunts_list.paginator %}
|
||||
{% include "pagination.html" with list=emprunts_list %}
|
||||
{% endif %}
|
||||
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Media</th>
|
||||
<th>Utilisateur</th>
|
||||
<th>Date emprunt</th>
|
||||
<th>Permanencier emprunt</th>
|
||||
<th>Date rendu</th>
|
||||
<th>Permanencier rendu</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for emprunt in emprunts_list %}
|
||||
<tr>
|
||||
<td>{{ emprunt.media }}</td>
|
||||
<td>{{ emprunt.user }}</td>
|
||||
<td>{{ emprunt.date_emprunt }}</td>
|
||||
<td>{{ emprunt.permanencier_emprunt }}</td>
|
||||
<td>
|
||||
{% if not emprunt.date_rendu %}
|
||||
{% if perms.media.change_emprunt %}
|
||||
<a class="btn btn-primary btn-sm" href="{% url 'media:retour-emprunt' emprunt.id %}">Retour</a>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{{ emprunt.date_rendu }}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{{ emprunt.permanencier_rendu }}</td>
|
||||
<td>
|
||||
{% if perms.media.change_emprunt %}
|
||||
<a href="{% url 'media:edit-emprunt' emprunt.id %}">Editer</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
|
@ -1,30 +0,0 @@
|
|||
{% comment %}
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
{% endcomment %}
|
||||
|
||||
{% if jeux_list.paginator %}
|
||||
{% include "pagination.html" with list=jeux_list %}
|
||||
{% endif %}
|
||||
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Nom</th>
|
||||
<th>Proprietaire</th>
|
||||
<th>Durée</th>
|
||||
<th>Joueurs min</th>
|
||||
<th>Joueurs max</th>
|
||||
<th>Comment</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for jeu in jeux_list %}
|
||||
<tr>
|
||||
<td>{{ jeu.nom }}</td>
|
||||
<td>{{ jeu.proprietaire }}</td>
|
||||
<td>{{ jeu.duree }}</td>
|
||||
<td>{{ jeu.nombre_joueurs_min }}</td>
|
||||
<td>{{ jeu.nombre_joueurs_max }}</td>
|
||||
<td>{{ jeu.comment }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
|
@ -1,24 +0,0 @@
|
|||
{% comment %}
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
{% endcomment %}
|
||||
|
||||
{% if medias_list.paginator %}
|
||||
{% include "pagination.html" with list=medias_list %}
|
||||
{% endif %}
|
||||
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Titre</th>
|
||||
<th>Auteur</th>
|
||||
<th>Cote</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for media in medias_list %}
|
||||
<tr>
|
||||
<td>{{ media.titre }}</td>
|
||||
<td>{% for aut in media.auteur.all %}{{ aut }}, {% endfor %}</td>
|
||||
<td>{{ media.cote }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
|
@ -1,16 +0,0 @@
|
|||
{% extends "media/sidebar.html" %}
|
||||
{% comment %}
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
{% endcomment %}
|
||||
|
||||
{% load i18n %}
|
||||
|
||||
{% block title %}Auteurs{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h2>Liste des auteurs</h2>
|
||||
{% if user.is_staff %}
|
||||
<a class="changelink" href="{% url 'admin:media_auteur_changelist' %}">{% trans 'Go to admin' %}</a>
|
||||
{% endif %}
|
||||
{% include "media/aff_auteurs.html" with auteurs_list=auteurs_list %}
|
||||
{% endblock %}
|
|
@ -1,16 +0,0 @@
|
|||
{% extends "media/sidebar.html" %}
|
||||
{% comment %}
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
{% endcomment %}
|
||||
|
||||
{% load i18n %}
|
||||
|
||||
{% block title %}Emprunts{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h2>Liste des emprunts</h2>
|
||||
{% if user.is_staff %}
|
||||
<a class="changelink" href="{% url 'admin:media_emprunt_changelist' %}">{% trans 'Go to admin' %}</a>
|
||||
{% endif %}
|
||||
{% include "media/aff_emprunts.html" with emprunts_list=emprunts_list %}
|
||||
{% endblock %}
|
|
@ -1,16 +0,0 @@
|
|||
{% extends "media/sidebar.html" %}
|
||||
{% comment %}
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
{% endcomment %}
|
||||
|
||||
{% load i18n %}
|
||||
|
||||
{% block title %}Jeux{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h2>Liste des jeux</h2>
|
||||
{% if user.is_staff %}
|
||||
<a class="changelink" href="{% url 'admin:media_jeu_changelist' %}">{% trans 'Go to admin' %}</a>
|
||||
{% endif %}
|
||||
{% include "media/aff_jeux.html" with jeux_list=jeux_list %}
|
||||
{% endblock %}
|
|
@ -1,16 +0,0 @@
|
|||
{% extends "media/sidebar.html" %}
|
||||
{% comment %}
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
{% endcomment %}
|
||||
|
||||
{% load i18n %}
|
||||
|
||||
{% block title %}Media{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h2>Liste des medias</h2>
|
||||
{% if user.is_staff %}
|
||||
<a class="changelink" href="{% url 'admin:media_media_changelist' %}">{% trans 'Go to admin' %}</a>
|
||||
{% endif %}
|
||||
{% include "media/aff_medias.html" with medias_list=medias_list %}
|
||||
{% endblock %}
|
|
@ -1,18 +1,40 @@
|
|||
{% extends "media/sidebar.html" %}
|
||||
{% extends "base_form.html" %}
|
||||
{% comment %}
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
{% endcomment %}
|
||||
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}Création et modification de media{% endblock %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block content %}
|
||||
{% bootstrap_form_errors mediaform %}
|
||||
<form method="post" onsubmit="window.onbeforeunload=null">{% csrf_token %}
|
||||
{% if form.non_field_errors %}
|
||||
<p class="errornote">
|
||||
{% for error in form.non_field_errors %}
|
||||
{{ error }}
|
||||
{% endfor %}
|
||||
</p>
|
||||
{% endif %}
|
||||
<fieldset class="module aligned">
|
||||
{% for field in form %}
|
||||
<div class="form-row{% if field.errors %} errors{% endif %}">
|
||||
{{ field.errors }}
|
||||
<div>
|
||||
{{ field.label_tag }}
|
||||
{% if field.is_readonly %}
|
||||
<div class="readonly">{{ field.contents }}</div>
|
||||
{% else %}
|
||||
{{ field }}
|
||||
{% endif %}
|
||||
{% if field.field.help_text %}
|
||||
<div class="help">{{ field.field.help_text|safe }}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</fieldset>
|
||||
|
||||
<form class="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form mediaform %}
|
||||
{% bootstrap_button "Créer ou modifier" button_type="submit" icon="star" %}
|
||||
<div class="submit-row">
|
||||
<input class="default" type="submit" value="{% trans 'Save' %}">
|
||||
</div>
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
{% extends "base.html" %}
|
||||
{% comment %}
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
{% endcomment %}
|
||||
|
||||
{% block sidebar %}
|
||||
<a class="list-group-item list-group-item-info" href="{% url "media:index" %}">
|
||||
<i class="glyphicon glyphicon-list"></i>
|
||||
Emprunts
|
||||
</a>
|
||||
<a class="list-group-item list-group-item-info" href="{% url "media:index-auteurs" %}">
|
||||
<i class="glyphicon glyphicon-list"></i>
|
||||
Auteurs
|
||||
</a>
|
||||
<a class="list-group-item list-group-item-info" href="{% url "media:index-medias" %}">
|
||||
<i class="glyphicon glyphicon-list"></i>
|
||||
Medias
|
||||
</a>
|
||||
<a class="list-group-item list-group-item-info" href="{% url "media:index-jeux" %}">
|
||||
<i class="glyphicon glyphicon-list"></i>
|
||||
Jeux
|
||||
</a>
|
||||
{% endblock %}
|
||||
|
|
@ -7,14 +7,8 @@ from django.conf.urls import url
|
|||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^index_auteurs/$', views.index_auteurs, name='index-auteurs'),
|
||||
url(r'^index_jeux/$', views.index_jeux, name='index-jeux'),
|
||||
url(r'^index_medias/$', views.index_medias, name='index-medias'),
|
||||
url(r'^add_emprunt/(?P<userid>[0-9]+)$', views.add_emprunt,
|
||||
name='add-emprunt'),
|
||||
url(r'^retour_emprunt/(?P<empruntid>[0-9]+)$', views.retour_emprunt,
|
||||
name='retour-emprunt'),
|
||||
url(r'^edit_emprunt/(?P<empruntid>[0-9]+)$', views.edit_emprunt,
|
||||
name='edit-emprunt'),
|
||||
url(r'^index_emprunts/$', views.index_emprunt, name='index'),
|
||||
]
|
||||
|
|
|
@ -4,17 +4,15 @@
|
|||
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.decorators import login_required, permission_required
|
||||
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
|
||||
from django.db import transaction
|
||||
from django.shortcuts import render, redirect
|
||||
from django.template.context_processors import csrf
|
||||
from django.utils import timezone
|
||||
from reversion import revisions as reversion
|
||||
|
||||
from med.settings import PAGINATION_NUMBER
|
||||
from users.models import User
|
||||
from .forms import EmpruntForm, EditEmpruntForm
|
||||
from .models import Auteur, Media, Jeu, Emprunt
|
||||
from .forms import EmpruntForm
|
||||
from .models import Emprunt
|
||||
|
||||
|
||||
def form(ctx, template, request):
|
||||
|
@ -49,27 +47,7 @@ def add_emprunt(request, userid):
|
|||
reversion.set_comment("Création")
|
||||
messages.success(request, "Le emprunt a été ajouté")
|
||||
return redirect("/media/index_emprunts/")
|
||||
return form({'mediaform': emprunt}, 'media/media.html', request)
|
||||
|
||||
|
||||
@login_required
|
||||
@permission_required('media.change_emprunt')
|
||||
def edit_emprunt(request, empruntid):
|
||||
try:
|
||||
emprunt_instance = Emprunt.objects.get(pk=empruntid)
|
||||
except Emprunt.DoesNotExist:
|
||||
messages.error(request, u"Entrée inexistante")
|
||||
return redirect("/media/index_emprunts/")
|
||||
emprunt = EditEmpruntForm(request.POST or None, instance=emprunt_instance)
|
||||
if emprunt.is_valid():
|
||||
with transaction.atomic(), reversion.create_revision():
|
||||
emprunt.save()
|
||||
reversion.set_user(request.user)
|
||||
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(
|
||||
field for field in emprunt.changed_data))
|
||||
messages.success(request, "Emprunt modifié")
|
||||
return redirect("/media/index_emprunts/")
|
||||
return form({'mediaform': emprunt}, 'media/media.html', request)
|
||||
return form({'form': emprunt}, 'media/media.html', request)
|
||||
|
||||
|
||||
@login_required
|
||||
|
@ -89,77 +67,6 @@ def retour_emprunt(request, empruntid):
|
|||
return redirect("/media/index_emprunts/")
|
||||
|
||||
|
||||
@login_required
|
||||
def index_jeux(request):
|
||||
jeux_list = Jeu.objects.all()
|
||||
paginator = Paginator(jeux_list, PAGINATION_NUMBER)
|
||||
page = request.GET.get('page')
|
||||
try:
|
||||
jeux_list = paginator.page(page)
|
||||
except PageNotAnInteger:
|
||||
# If page is not an integer, deliver first page.
|
||||
jeux_list = paginator.page(1)
|
||||
except EmptyPage:
|
||||
# If page is out of range (e.g. 9999), deliver last page of results.
|
||||
jeux_list = paginator.page(paginator.num_pages)
|
||||
return render(request, 'media/index_jeux.html', {'jeux_list': jeux_list})
|
||||
|
||||
|
||||
@login_required
|
||||
def index_auteurs(request):
|
||||
auteurs_list = Auteur.objects.all().order_by('nom')
|
||||
paginator = Paginator(auteurs_list, PAGINATION_NUMBER)
|
||||
page = request.GET.get('page')
|
||||
try:
|
||||
auteurs_list = paginator.page(page)
|
||||
except PageNotAnInteger:
|
||||
# If page is not an integer, deliver first page.
|
||||
auteurs_list = paginator.page(1)
|
||||
except EmptyPage:
|
||||
# If page is out of range (e.g. 9999), deliver last page of results.
|
||||
auteurs_list = paginator.page(paginator.num_pages)
|
||||
return render(request, 'media/index_auteurs.html',
|
||||
{'auteurs_list': auteurs_list})
|
||||
|
||||
|
||||
@login_required
|
||||
def index_medias(request):
|
||||
medias_list = Media.objects.all()
|
||||
paginator = Paginator(medias_list, PAGINATION_NUMBER)
|
||||
page = request.GET.get('page')
|
||||
try:
|
||||
medias_list = paginator.page(page)
|
||||
except PageNotAnInteger:
|
||||
# If page is not an integer, deliver first page.
|
||||
medias_list = paginator.page(1)
|
||||
except EmptyPage:
|
||||
# If page is out of range (e.g. 9999), deliver last page of results.
|
||||
medias_list = paginator.page(paginator.num_pages)
|
||||
return render(request, 'media/index_medias.html',
|
||||
{'medias_list': medias_list})
|
||||
|
||||
|
||||
@login_required
|
||||
def index_emprunt(request):
|
||||
if request.user.has_perms(['perm']):
|
||||
emprunts_list = Emprunt.objects.all()
|
||||
else:
|
||||
emprunts_list = Emprunt.objects.filter(user=request.user)
|
||||
paginator = Paginator(emprunts_list.order_by('date_emprunt').reverse(),
|
||||
PAGINATION_NUMBER)
|
||||
page = request.GET.get('page')
|
||||
try:
|
||||
emprunts_list = paginator.page(page)
|
||||
except PageNotAnInteger:
|
||||
# If page is not an integer, deliver first page.
|
||||
emprunts_list = paginator.page(1)
|
||||
except EmptyPage:
|
||||
# If page is out of range (e.g. 9999), deliver last page of results.
|
||||
emprunts_list = paginator.page(paginator.num_pages)
|
||||
return render(request, 'media/index_emprunts.html',
|
||||
{'emprunts_list': emprunts_list})
|
||||
|
||||
|
||||
def index(request):
|
||||
"""
|
||||
Home page with user's borrowed items
|
||||
|
|
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-08-08 20:49+0200\n"
|
||||
"POT-Creation-Date: 2019-08-09 22:14+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
@ -17,27 +17,27 @@ msgstr ""
|
|||
msgid "Welcome,"
|
||||
msgstr ""
|
||||
|
||||
#: templates/admin/base_site.html:29
|
||||
msgid "Library"
|
||||
#: templates/admin/base_site.html:30
|
||||
msgid "Explore the library"
|
||||
msgstr "Explorer la médiatèque"
|
||||
|
||||
#: templates/admin/base_site.html:42 templates/admin/base_site.html:61
|
||||
msgid "View admin"
|
||||
msgstr "Administration"
|
||||
#: templates/admin/base_site.html:50 templates/admin/base_site.html:69
|
||||
msgid "Explore database"
|
||||
msgstr "Explorer la base de données"
|
||||
|
||||
#: templates/admin/base_site.html:54
|
||||
#: templates/admin/base_site.html:62
|
||||
msgid "Documentation"
|
||||
msgstr ""
|
||||
|
||||
#: templates/admin/base_site.html:63
|
||||
#: templates/admin/base_site.html:71
|
||||
msgid "Log out"
|
||||
msgstr ""
|
||||
|
||||
#: templates/admin/base_site.html:65 templates/registration/login.html:8
|
||||
#: templates/admin/base_site.html:73 templates/registration/login.html:8
|
||||
msgid "Log in"
|
||||
msgstr ""
|
||||
|
||||
#: templates/registration/logged_out.html:9
|
||||
#: templates/base.html:10 templates/registration/logged_out.html:9
|
||||
#: templates/registration/password_change_done.html:9
|
||||
#: templates/registration/password_change_form.html:9
|
||||
#: templates/registration/password_reset_complete.html:9
|
||||
|
@ -89,3 +89,6 @@ msgstr ""
|
|||
#, python-format
|
||||
msgid "The %(site_name)s team"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "View admin"
|
||||
#~ msgstr "Administration"
|
||||
|
|
|
@ -25,17 +25,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||
{% endif %}
|
||||
{% endblock %}
|
||||
{% block userlinks %}
|
||||
{# Link to our apps outside of admin #}
|
||||
<span class="dropdown">
|
||||
<a href="{% url 'media:index' %}">{% trans 'Library' %}</a>
|
||||
<span class="dropdown-content">
|
||||
<a href="{% url "media:index" %}">Emprunts</a>
|
||||
<a href="{% url "media:index-auteurs" %}">Auteurs</a>
|
||||
<a href="{% url "media:index-medias" %}">Medias</a>
|
||||
<a href="{% url "media:index-jeux" %}">Jeux</a>
|
||||
</span>
|
||||
</span> /
|
||||
|
||||
{% if user.is_authenticated %}
|
||||
{% if perms.users.add_user %}
|
||||
<a href="{% url "users:new-user" %}">Nouveau utilisateur</a> /
|
||||
|
@ -47,7 +36,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||
{% if available_apps %}
|
||||
{# When in admin site, list all admin pages and documentation #}
|
||||
<span class="dropdown">
|
||||
<a href="{% url 'admin:index' %}">{% trans 'View admin' %}</a>
|
||||
<a href="{% url 'admin:index' %}">{% trans 'Explore database' %}</a>
|
||||
<span class="dropdown-content">
|
||||
{% for app in available_apps %}
|
||||
{% for model in app.models %}
|
||||
|
@ -66,7 +55,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||
</span> /
|
||||
{% elif user.is_staff %}
|
||||
{# When not in admin site, but user is staff then add a link #}
|
||||
<a href="{% url 'admin:index' %}">{% trans 'View admin' %}</a> /
|
||||
<a href="{% url 'admin:index' %}">{% trans 'Explore database' %}</a> /
|
||||
{% endif %}
|
||||
<a href="{% url 'logout' %}">{% trans 'Log out' %}</a>
|
||||
{% else %}
|
||||
|
|
Loading…
Reference in New Issue