mirror of
https://github.com/yummy4friends/y4f.git
synced 2024-12-30 23:37:09 +01:00
Compare commits
7 Commits
6c1b7bd336
...
6f8dabbd3f
Author | SHA1 | Date | |
---|---|---|---|
|
6f8dabbd3f | ||
|
fe765064de | ||
|
ece3af8316 | ||
|
4180c3c61e | ||
|
fe4a58e4ea | ||
|
688315441e | ||
f41229cd71 |
46
README.md
46
README.md
@ -1,3 +1,47 @@
|
|||||||
# y4f
|
# y4f
|
||||||
|
|
||||||
[![Deploy blazor to GitHub Pages](https://github.com/yummy4friends/y4f/actions/workflows/main.yml/badge.svg?branch=dev)](https://github.com/yummy4friends/y4f/actions/workflows/main.yml)
|
## Description (German)
|
||||||
|
|
||||||
|
Yummy4Friends ist eine benutzerfreundliche und visuell ansprechende Webapp zur Onlinebestellung von Speisen mit der dynamischen Einbindung einer Kunden- und Speisendatenbank unter Berücksichtigung von Sonderwünschen. Zur Kundenbindung wird auch die Verwaltung von Kundenrabatten, Vorbestellmöglichkeiten sowie konfigurierbare Abholtermine realisiert.
|
||||||
|
|
||||||
|
## Description (English)
|
||||||
|
|
||||||
|
Yummy4Friends is a user friendly and visually appealing WebApp for ordering food or other things online. Food or other stuff get dynamically fetched from a customer and food database while also taking into account special requests. To attract customers one can also offer limeted time sales/coupons, ordering in advance as well as being able to choosing their preferred pickup time.
|
||||||
|
|
||||||
|
## Tech Stack
|
||||||
|
|
||||||
|
[Blazor WebAssembly](https://dotnet.microsoft.com/en-us/apps/aspnet/web-apps/blazor)
|
||||||
|
|
||||||
|
## Dependecies
|
||||||
|
|
||||||
|
On Ubuntu our dependencies are:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nala install dotnet-sdk-7.0 docker-ce docker-ce-cli docker-buildx-plugin docker-compose-plugin
|
||||||
|
```
|
||||||
|
|
||||||
|
Dependency names will depend on your linux distribution.
|
||||||
|
|
||||||
|
For this this project you also need Traefik. Or you can use your own reverse proxy and edit the docker-compose files to reflect that.
|
||||||
|
|
||||||
|
## Running it
|
||||||
|
|
||||||
|
Clone the repo.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/yummy4friends/y4f.git && cd y4f
|
||||||
|
```
|
||||||
|
|
||||||
|
Start the website with docker-compose.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker-compose up --build -d
|
||||||
|
```
|
||||||
|
|
||||||
|
Also start up the API.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd src/WebApi/ && docker-compose up --build -d
|
||||||
|
```
|
||||||
|
|
||||||
|
This setup is for showcasing the project and is therefore not intended for production.
|
||||||
|
@ -12,12 +12,11 @@ services:
|
|||||||
- traefik.http.routers.y4f-webapi.tls=true
|
- traefik.http.routers.y4f-webapi.tls=true
|
||||||
- traefik.http.routers.y4f-webapi.tls.certResolver=default
|
- traefik.http.routers.y4f-webapi.tls.certResolver=default
|
||||||
networks:
|
networks:
|
||||||
- default
|
- y4f-default
|
||||||
- traefik
|
- traefik
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
networks:
|
networks:
|
||||||
default:
|
y4f-default:
|
||||||
name: y4f-default
|
|
||||||
external: true
|
external: true
|
||||||
traefik:
|
traefik:
|
||||||
external: true
|
external: true
|
82
src/y4f/Shared/Chefin/Bestelluebersicht-Chefin.razor
Normal file
82
src/y4f/Shared/Chefin/Bestelluebersicht-Chefin.razor
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
@page "/Bestelluebersicht"
|
||||||
|
@layout ChefinLayout
|
||||||
|
|
||||||
|
<div class="container d-flex flex-column">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-8">
|
||||||
|
<br /><br />
|
||||||
|
<table class="table table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th colspan="2">Aktive Bestellungen</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><a href="BDetail">#1234 12:30</a></td>
|
||||||
|
<td><a href="BDetail">#2345 18:45</a></td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="BDetail">#3456 13:00</a></td>
|
||||||
|
<td><a href="BDetail">#4567 19:00</a></td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="BDetail">#5678 14:30</a></td>
|
||||||
|
<td><a href="BDetail">#6789 19:15</a></td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="BDetail">#4321 15:15</a></td>
|
||||||
|
<td><a href="BDetail">#5432 19:15</a></td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="BDetail">#6543 15:30</a></td>
|
||||||
|
<td><a href="BDetail">#7654 19:15</a></td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="BDetail">#7654 15:30</a></td>
|
||||||
|
<td> </td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="BDetail">#8765 16:00</a></td>
|
||||||
|
<td> </td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="BDetail">#9876 17:30</a></td>
|
||||||
|
<td> </td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-3">
|
||||||
|
<p id="text" readonly >Abholzeit</p>
|
||||||
|
<br />
|
||||||
|
<form id="button" action="Bestelluebersicht">
|
||||||
|
<input type="submit" value="30 Min" class="btn">
|
||||||
|
</form>
|
||||||
|
<form id="button" action="Bestelluebersicht">
|
||||||
|
<input type="submit" value="45 Min" class="btn">
|
||||||
|
</form>
|
||||||
|
<form id="button" action="Bestelluebersicht">
|
||||||
|
<input type="submit" value="1 Std" class="btn">
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@code {
|
||||||
|
|
||||||
|
}
|
37
src/y4f/Shared/Chefin/Bestelluebersicht-Chefin.razor.css
Normal file
37
src/y4f/Shared/Chefin/Bestelluebersicht-Chefin.razor.css
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
tbody {
|
||||||
|
border-color: black;
|
||||||
|
}
|
||||||
|
td {
|
||||||
|
text-align:center;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
table {
|
||||||
|
border-radius: 50px !important;
|
||||||
|
margin-left: 50px;
|
||||||
|
}
|
||||||
|
td > a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
#button {
|
||||||
|
margin-bottom: 35px;
|
||||||
|
border-radius: 50px;
|
||||||
|
margin-left: 100px;
|
||||||
|
}
|
||||||
|
#text {
|
||||||
|
margin-top: 50px;
|
||||||
|
margin-bottom: 45px;
|
||||||
|
margin-left: 100px;
|
||||||
|
width: 69%;
|
||||||
|
padding-top: 2px;
|
||||||
|
padding-bottom: 2px;
|
||||||
|
padding: 8px;
|
||||||
|
color: black;
|
||||||
|
background-color: #89F9A5;
|
||||||
|
border-style:none;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
thead {
|
||||||
|
background-color: #89F9A5;
|
||||||
|
border-color: #89F9A5;
|
||||||
|
}
|
139
src/y4f/Shared/Chefin/BestelluebersichtD-Chefin.razor
Normal file
139
src/y4f/Shared/Chefin/BestelluebersichtD-Chefin.razor
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
@page "/BestelluebersichtD-Chefin"
|
||||||
|
@layout ChefinLayout
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-12 col-lg-6">
|
||||||
|
@*Tabelle Ihre Bestellung*@
|
||||||
|
<div class="tbl-container">
|
||||||
|
<table class="table bdr">
|
||||||
|
<thead class="bg_green">
|
||||||
|
<tr>
|
||||||
|
<td>Ihre Bestellung</td>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody class="bg_lightgreen" style="background-color:white;">
|
||||||
|
<tr>
|
||||||
|
<td class="br" style="padding-top:20px; padding-bottom:0px; border-bottom-width: 0px;">
|
||||||
|
1 Nudel mit Hühnerfleisch (groß)
|
||||||
|
<div style="font-size:0.7rem;padding-left:15px;">mit Knoblauchsoße</div>
|
||||||
|
</td>
|
||||||
|
<td class="d-flex justify-content-center align-items-center" style="padding-top:20px; padding-bottom:0px; border-style:hidden;">9,10€</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;">1 Coca Cola</td>
|
||||||
|
<td class="d-flex justify-content-center align-items-center" style="padding-top:0px; border-style:hidden;">2,50€</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
|
||||||
|
<td class="d-flex justify-content-center align-items-center" style="border-style:hidden;"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
|
||||||
|
<td class="d-flex justify-content-center align-items-center" style="border-style:hidden;"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
|
||||||
|
<td class="d-flex justify-content-center align-items-center" style="border-style:hidden;"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
|
||||||
|
<td class="d-flex justify-content-center align-items-center" style="border-style:hidden;"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
|
||||||
|
<td class="d-flex justify-content-center align-items-center" style="border-style:hidden;"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
|
||||||
|
<td class="d-flex justify-content-center align-items-center" style="border-style:hidden;"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
|
||||||
|
<td class="d-flex justify-content-center align-items-center" style="border-style:hidden;"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
|
||||||
|
<td class="d-flex justify-content-center align-items-center" style="border-bottom-width: 0px; border-style:hidden;"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
|
||||||
|
<td class="d-flex justify-content-center align-items-center" style="border-bottom-width: 0px; border-style:hidden;"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
|
||||||
|
<td class="d-flex justify-content-center align-items-center" style="border-bottom-width: 0px; border-style:hidden;"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
|
||||||
|
<td class="d-flex justify-content-center align-items-center" style="border-bottom-width: 0px; border-style:hidden;"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="br" style=" padding-top:0px; border-bottom-width: 0px;"></td>
|
||||||
|
<td class="d-flex justify-content-center align-items-center" style="border-bottom-width: 0px; border-style:hidden;"></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
<tfoot class="bg_lightgreen">
|
||||||
|
<tr style="border-top:solid 1px black; background-color:white;">
|
||||||
|
<th class="" style="text-align:right;">Summe</th>
|
||||||
|
<td class="d-flex justify-content-center align-items-center">11,60€</td>
|
||||||
|
</tr>
|
||||||
|
</tfoot>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-12 col-lg-6">
|
||||||
|
|
||||||
|
<div class="d-flex flex-column align-items-center ">
|
||||||
|
<div class="tbl-container w-100">
|
||||||
|
<!-- <== overflow: hidden applied to parent -->
|
||||||
|
<table class="table table-bordered bdr " style=" border-radius: 50px; margin-left: 50px;">
|
||||||
|
<thead class="bg_green">
|
||||||
|
<tr>
|
||||||
|
<td class="d-flex justify-content-center align-items-center" style="border-bottom:0px;">
|
||||||
|
<p>Abholzeit</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody >
|
||||||
|
<tr>
|
||||||
|
<td class="d-flex justify-content-center align-items-center" style="padding-top:0px; background-color:white;">
|
||||||
|
<div style="margin:20px;">
|
||||||
|
<div class="d-flex justify-content-center align-items-center" >
|
||||||
|
<p>12:30 Uhr</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<div class="d-flex flex-column" style="align-items: center; margin-left: 100px;">
|
||||||
|
<button class="btn_back w-75">Zurück</button>
|
||||||
|
<button class="btn btn-danger w-75" style="border-radius: 50px; padding-top:12px; padding-bottom:12px; color:black;">Bestellung auflösen</button>
|
||||||
|
<button class="btn_forward w-75">Bestellung abschließen</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@*Buttons*@
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
@*<div class="h-100">
|
||||||
|
@*Essen Abholen?
|
||||||
|
<div class="row h-25 w-100">
|
||||||
|
<div class="col">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>*@
|
||||||
|
@code {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,3 @@
|
|||||||
|
button {
|
||||||
|
margin: 10px;
|
||||||
|
}
|
25
src/y4f/Shared/Chefin/NavChefin.razor
Normal file
25
src/y4f/Shared/Chefin/NavChefin.razor
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<nav class="navbar navbar-expand-md navbar-light mb-4 me-5 ms-5 ">
|
||||||
|
<div class="container-fluid">
|
||||||
|
@*<a class="navbar-brand" href="">Yummy4Friends</a>*@
|
||||||
|
<a class="navbar-brand" href="">
|
||||||
|
<img src="assets/Logo_new.png" alt="Yummy4Friends" width="60px" height="auto">
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<ul class="navbar-nav">
|
||||||
|
|
||||||
|
<li class="nav-item">
|
||||||
|
<NavLink class="nav-link" href="RegistrierungA">
|
||||||
|
#1
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" class="bi bi-person-fill" viewBox="0 0 16 16">
|
||||||
|
<path d="M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1H3Zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z" />
|
||||||
|
</svg>
|
||||||
|
</NavLink>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
|
||||||
|
}
|
14
src/y4f/Shared/ChefinLayout.razor
Normal file
14
src/y4f/Shared/ChefinLayout.razor
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
@inherits LayoutComponentBase
|
||||||
|
|
||||||
|
|
||||||
|
<div >
|
||||||
|
<y4f.Shared.Chefin.NavChefin />
|
||||||
|
|
||||||
|
<main class="container">
|
||||||
|
|
||||||
|
|
||||||
|
@Body
|
||||||
|
|
||||||
|
</main>
|
||||||
|
|
||||||
|
</div>
|
5
src/y4f/Shared/ChefinLayout.razor.css
Normal file
5
src/y4f/Shared/ChefinLayout.razor.css
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
html, body {
|
||||||
|
/*background-color: #C7FFD5;*/
|
||||||
|
padding: 0px;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
35
src/y4f/Shared/NavStartseite.razor
Normal file
35
src/y4f/Shared/NavStartseite.razor
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<nav class="navbar navbar-expand-md navbar-light mb-4 me-5 ms-5 ">
|
||||||
|
<div class="container-fluid">
|
||||||
|
@*<a class="navbar-brand" href="">Yummy4Friends</a>*@
|
||||||
|
|
||||||
|
<button class="navbar-toggler @NavButtonCssClass" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse"
|
||||||
|
aria-controls="navbarCollapse" aria-label="Toggle navigation" @onclick="ToggleNavMenu">
|
||||||
|
<span class="navbar-toggler-icon"></span>
|
||||||
|
</button>
|
||||||
|
<div class="collapse navbar-collapse justify-content-end @NavBarCssClass" id="navbarCollapse" @onclick="ToggleNavMenu">
|
||||||
|
<ul class="navbar-nav">
|
||||||
|
|
||||||
|
<li class="nav-item">
|
||||||
|
<NavLink class="nav-link" href="RegistrierungA">
|
||||||
|
Admin
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" class="bi bi-person-fill" viewBox="0 0 16 16">
|
||||||
|
<path d="M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1H3Zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z" />
|
||||||
|
</svg>
|
||||||
|
</NavLink>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
private bool collapseNavMenu = true;
|
||||||
|
private string? NavBarCssClass => collapseNavMenu ? null : "show";
|
||||||
|
private string? NavButtonCssClass => collapseNavMenu ? "collapsed" : null;
|
||||||
|
|
||||||
|
|
||||||
|
private void ToggleNavMenu()
|
||||||
|
{
|
||||||
|
collapseNavMenu = !collapseNavMenu;
|
||||||
|
}
|
||||||
|
}
|
@ -3,15 +3,19 @@
|
|||||||
|
|
||||||
<div class="container col-lg-5 col-md-9 col-sm-12 d-flex flex-column " id="content">
|
<div class="container col-lg-5 col-md-9 col-sm-12 d-flex flex-column " id="content">
|
||||||
<p>Benutzername:</p>
|
<p>Benutzername:</p>
|
||||||
|
<center>
|
||||||
<input type="text" class="form-control" id="name" name="name">
|
<input type="text" class="form-control" id="name" name="name">
|
||||||
|
</center>
|
||||||
<p>Passwort:</p>
|
<p>Passwort:</p>
|
||||||
|
<center>
|
||||||
<input type="text" class="form-control" id="password" name="password">
|
<input type="text" class="form-control" id="password" name="password">
|
||||||
|
</center>
|
||||||
|
<center>
|
||||||
|
|
||||||
<form id="button" action="Bestelluebersicht">
|
<form id="button" action="Bestelluebersicht">
|
||||||
<input type="submit" value="Login" class="btn">
|
<input type="submit" value="Login" class="btn">
|
||||||
</form>
|
</form>
|
||||||
|
</center>
|
||||||
</div>
|
</div>
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
|
@ -2,10 +2,16 @@
|
|||||||
color: grey;
|
color: grey;
|
||||||
margin-bottom:0px;
|
margin-bottom:0px;
|
||||||
margin-top: 15px;
|
margin-top: 15px;
|
||||||
|
margin-left: 61px;
|
||||||
}
|
}
|
||||||
|
|
||||||
form {
|
form {
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
|
border-radius: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
border-radius: 50px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
|
<NavStartseite />
|
||||||
|
|
||||||
<main class="container">
|
<main class="container">
|
||||||
|
|
||||||
|
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 9.0 KiB |
Binary file not shown.
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 20 KiB |
Binary file not shown.
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 75 KiB |
Loading…
Reference in New Issue
Block a user