more-activities #1035
@@ -1,8 +1,8 @@
 | 
				
			|||||||
use std::ops::DerefMut;
 | 
					use std::ops::DerefMut;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use chrono::NaiveDateTime;
 | 
					use chrono::NaiveDateTime;
 | 
				
			||||||
use rocket::serde::{Deserialize, Serialize};
 | 
					 | 
				
			||||||
use rocket::FromForm;
 | 
					use rocket::FromForm;
 | 
				
			||||||
 | 
					use rocket::serde::{Deserialize, Serialize};
 | 
				
			||||||
use sqlx::{FromRow, Sqlite, SqlitePool, Transaction};
 | 
					use sqlx::{FromRow, Sqlite, SqlitePool, Transaction};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::model::boathouse::Boathouse;
 | 
					use crate::model::boathouse::Boathouse;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
use std::ops::DerefMut;
 | 
					use std::ops::DerefMut;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use serde::Serialize;
 | 
					use serde::Serialize;
 | 
				
			||||||
use sqlx::{sqlite::SqliteQueryResult, FromRow, Sqlite, SqlitePool, Transaction};
 | 
					use sqlx::{FromRow, Sqlite, SqlitePool, Transaction, sqlite::SqliteQueryResult};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use super::user::User;
 | 
					use super::user::User;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,9 @@
 | 
				
			|||||||
use std::{error::Error, fs};
 | 
					use std::{error::Error, fs};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use lettre::{
 | 
					use lettre::{
 | 
				
			||||||
    message::{header::ContentType, Attachment, MultiPart, SinglePart},
 | 
					 | 
				
			||||||
    transport::smtp::authentication::Credentials,
 | 
					 | 
				
			||||||
    Address, Message, SmtpTransport, Transport,
 | 
					    Address, Message, SmtpTransport, Transport,
 | 
				
			||||||
 | 
					    message::{Attachment, MultiPart, SinglePart, header::ContentType},
 | 
				
			||||||
 | 
					    transport::smtp::authentication::Credentials,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use sqlx::{Sqlite, SqlitePool, Transaction};
 | 
					use sqlx::{Sqlite, SqlitePool, Transaction};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
use super::User;
 | 
					use super::User;
 | 
				
			||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    model::family::Family, BOAT_STORAGE, DUAL_MEMBERSHIP, EINSCHREIBGEBUEHR, FAMILY_THREE_OR_MORE,
 | 
					    BOAT_STORAGE, DUAL_MEMBERSHIP, EINSCHREIBGEBUEHR, FAMILY_THREE_OR_MORE, FAMILY_TWO, FOERDERND,
 | 
				
			||||||
    FAMILY_TWO, FOERDERND, REGULAR, RENNRUDERBEITRAG, STUDENT_OR_PUPIL, TRIAL_ROWING,
 | 
					    REGULAR, RENNRUDERBEITRAG, STUDENT_OR_PUPIL, TRIAL_ROWING, TRIAL_ROWING_REDUCED,
 | 
				
			||||||
    TRIAL_ROWING_REDUCED, UNTERSTUETZEND,
 | 
					    UNTERSTUETZEND, model::family::Family,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use chrono::{Datelike, Local, NaiveDate};
 | 
					use chrono::{Datelike, Local, NaiveDate};
 | 
				
			||||||
use serde::Serialize;
 | 
					use serde::Serialize;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,20 +1,21 @@
 | 
				
			|||||||
use std::{fmt::Display, ops::DerefMut};
 | 
					use std::{fmt::Display, ops::DerefMut};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use argon2::{password_hash::SaltString, Argon2, PasswordHasher};
 | 
					use argon2::{Argon2, PasswordHasher, password_hash::SaltString};
 | 
				
			||||||
use chrono::{Datelike, Local, NaiveDate};
 | 
					use chrono::{Datelike, Local, NaiveDate};
 | 
				
			||||||
use log::info;
 | 
					use log::info;
 | 
				
			||||||
use rocket::async_trait;
 | 
					use rocket::async_trait;
 | 
				
			||||||
use rocket::{
 | 
					use rocket::{
 | 
				
			||||||
 | 
					    Request,
 | 
				
			||||||
    http::{Cookie, Status},
 | 
					    http::{Cookie, Status},
 | 
				
			||||||
    request::{FromRequest, Outcome},
 | 
					    request::{FromRequest, Outcome},
 | 
				
			||||||
    time::{Duration, OffsetDateTime},
 | 
					    time::{Duration, OffsetDateTime},
 | 
				
			||||||
    Request,
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use serde::{Deserialize, Serialize};
 | 
					use serde::{Deserialize, Serialize};
 | 
				
			||||||
use sqlx::{FromRow, Sqlite, SqlitePool, Transaction};
 | 
					use sqlx::{FromRow, Sqlite, SqlitePool, Transaction};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use super::activity::{ActivityBuilder, ReasonAuth};
 | 
					use super::activity::{ActivityBuilder, ReasonAuth};
 | 
				
			||||||
use super::{
 | 
					use super::{
 | 
				
			||||||
 | 
					    Day,
 | 
				
			||||||
    log::Log,
 | 
					    log::Log,
 | 
				
			||||||
    logbook::Logbook,
 | 
					    logbook::Logbook,
 | 
				
			||||||
    mail::Mail,
 | 
					    mail::Mail,
 | 
				
			||||||
@@ -23,7 +24,6 @@ use super::{
 | 
				
			|||||||
    role::Role,
 | 
					    role::Role,
 | 
				
			||||||
    stat::Stat,
 | 
					    stat::Stat,
 | 
				
			||||||
    tripdetails::TripDetails,
 | 
					    tripdetails::TripDetails,
 | 
				
			||||||
    Day,
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use crate::AMOUNT_DAYS_TO_SHOW_TRIPS_AHEAD;
 | 
					use crate::AMOUNT_DAYS_TO_SHOW_TRIPS_AHEAD;
 | 
				
			||||||
use scheckbuch::ScheckbuchUser;
 | 
					use scheckbuch::ScheckbuchUser;
 | 
				
			||||||
@@ -487,7 +487,7 @@ ASKÖ Ruderverein Donau Linz", self.name),
 | 
				
			|||||||
                .save(db)
 | 
					                .save(db)
 | 
				
			||||||
                .await;
 | 
					                .await;
 | 
				
			||||||
            return Err(LoginError::InvalidAuthenticationCombo); //User existed sometime ago; has
 | 
					            return Err(LoginError::InvalidAuthenticationCombo); //User existed sometime ago; has
 | 
				
			||||||
                                                                //been deleted
 | 
					            //been deleted
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if let Some(user_pw) = user.pw.as_ref() {
 | 
					        if let Some(user_pw) = user.pw.as_ref() {
 | 
				
			||||||
@@ -590,9 +590,9 @@ ASKÖ Ruderverein Donau Linz", self.name),
 | 
				
			|||||||
    pub(crate) async fn amount_days_to_show(&self, db: &SqlitePool) -> i64 {
 | 
					    pub(crate) async fn amount_days_to_show(&self, db: &SqlitePool) -> i64 {
 | 
				
			||||||
        if self.allowed_to_steer(db).await {
 | 
					        if self.allowed_to_steer(db).await {
 | 
				
			||||||
            let end_of_year = NaiveDate::from_ymd_opt(Local::now().year(), 12, 31).unwrap(); //Ok,
 | 
					            let end_of_year = NaiveDate::from_ymd_opt(Local::now().year(), 12, 31).unwrap(); //Ok,
 | 
				
			||||||
                                                                                             //december
 | 
					            //december
 | 
				
			||||||
                                                                                             //has 31
 | 
					            //has 31
 | 
				
			||||||
                                                                                             //days
 | 
					            //days
 | 
				
			||||||
            let days_left_in_year = end_of_year
 | 
					            let days_left_in_year = end_of_year
 | 
				
			||||||
                .signed_duration_since(Local::now().date_naive())
 | 
					                .signed_duration_since(Local::now().date_naive())
 | 
				
			||||||
                .num_days()
 | 
					                .num_days()
 | 
				
			||||||
@@ -601,9 +601,9 @@ ASKÖ Ruderverein Donau Linz", self.name),
 | 
				
			|||||||
            if days_left_in_year <= 31 {
 | 
					            if days_left_in_year <= 31 {
 | 
				
			||||||
                let end_of_next_year =
 | 
					                let end_of_next_year =
 | 
				
			||||||
                    NaiveDate::from_ymd_opt(Local::now().year() + 1, 12, 31).unwrap(); //Ok,
 | 
					                    NaiveDate::from_ymd_opt(Local::now().year() + 1, 12, 31).unwrap(); //Ok,
 | 
				
			||||||
                                                                                       //december
 | 
					                //december
 | 
				
			||||||
                                                                                       //has 31
 | 
					                //has 31
 | 
				
			||||||
                                                                                       //days
 | 
					                //days
 | 
				
			||||||
                end_of_next_year
 | 
					                end_of_next_year
 | 
				
			||||||
                    .signed_duration_since(Local::now().date_naive())
 | 
					                    .signed_duration_since(Local::now().date_naive())
 | 
				
			||||||
                    .num_days()
 | 
					                    .num_days()
 | 
				
			||||||
@@ -835,8 +835,8 @@ special_user!(SteeringUser, +"cox", +"Bootsführer");
 | 
				
			|||||||
special_user!(AdminUser, +"admin");
 | 
					special_user!(AdminUser, +"admin");
 | 
				
			||||||
special_user!(AllowedForPlannedTripsUser, +"Donau Linz", +"scheckbuch", +"Förderndes Mitglied");
 | 
					special_user!(AllowedForPlannedTripsUser, +"Donau Linz", +"scheckbuch", +"Förderndes Mitglied");
 | 
				
			||||||
special_user!(DonauLinzUser, +"Donau Linz", -"Unterstützend", -"Förderndes Mitglied"); // TODO:
 | 
					special_user!(DonauLinzUser, +"Donau Linz", -"Unterstützend", -"Förderndes Mitglied"); // TODO:
 | 
				
			||||||
                                                                                       // remove ->
 | 
					// remove ->
 | 
				
			||||||
                                                                                       // RegularUser
 | 
					// RegularUser
 | 
				
			||||||
special_user!(SchnupperBetreuerUser, +"schnupper-betreuer");
 | 
					special_user!(SchnupperBetreuerUser, +"schnupper-betreuer");
 | 
				
			||||||
special_user!(VorstandUser, +"admin", +"Vorstand");
 | 
					special_user!(VorstandUser, +"admin", +"Vorstand");
 | 
				
			||||||
special_user!(EventUser, +"manage_events");
 | 
					special_user!(EventUser, +"manage_events");
 | 
				
			||||||
@@ -950,17 +950,21 @@ mod test {
 | 
				
			|||||||
    #[sqlx::test]
 | 
					    #[sqlx::test]
 | 
				
			||||||
    fn wrong_pw() {
 | 
					    fn wrong_pw() {
 | 
				
			||||||
        let pool = testdb!();
 | 
					        let pool = testdb!();
 | 
				
			||||||
        assert!(User::login(&pool, "admin".into(), "admi".into())
 | 
					        assert!(
 | 
				
			||||||
            .await
 | 
					            User::login(&pool, "admin".into(), "admi".into())
 | 
				
			||||||
            .is_err());
 | 
					                .await
 | 
				
			||||||
 | 
					                .is_err()
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[sqlx::test]
 | 
					    #[sqlx::test]
 | 
				
			||||||
    fn wrong_username() {
 | 
					    fn wrong_username() {
 | 
				
			||||||
        let pool = testdb!();
 | 
					        let pool = testdb!();
 | 
				
			||||||
        assert!(User::login(&pool, "admi".into(), "admin".into())
 | 
					        assert!(
 | 
				
			||||||
            .await
 | 
					            User::login(&pool, "admi".into(), "admin".into())
 | 
				
			||||||
            .is_err());
 | 
					                .await
 | 
				
			||||||
 | 
					                .is_err()
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[sqlx::test]
 | 
					    #[sqlx::test]
 | 
				
			||||||
@@ -980,9 +984,11 @@ mod test {
 | 
				
			|||||||
        let pool = testdb!();
 | 
					        let pool = testdb!();
 | 
				
			||||||
        let user = User::find_by_id(&pool, 1).await.unwrap();
 | 
					        let user = User::find_by_id(&pool, 1).await.unwrap();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assert!(User::login(&pool, "admin".into(), "abc".into())
 | 
					        assert!(
 | 
				
			||||||
            .await
 | 
					            User::login(&pool, "admin".into(), "abc".into())
 | 
				
			||||||
            .is_err());
 | 
					                .await
 | 
				
			||||||
 | 
					                .is_err()
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        user.update_pw(&pool, "abc".into()).await;
 | 
					        user.update_pw(&pool, "abc".into()).await;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,8 @@
 | 
				
			|||||||
use super::{ManageUserUser, User};
 | 
					use super::{ManageUserUser, User};
 | 
				
			||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
 | 
					    NonEmptyString,
 | 
				
			||||||
    model::{activity::ActivityBuilder, mail::Mail, notification::Notification, role::Role},
 | 
					    model::{activity::ActivityBuilder, mail::Mail, notification::Notification, role::Role},
 | 
				
			||||||
    special_user, NonEmptyString,
 | 
					    special_user,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use chrono::NaiveDate;
 | 
					use chrono::NaiveDate;
 | 
				
			||||||
use rocket::{async_trait, fs::TempFile, tokio::io::AsyncReadExt};
 | 
					use rocket::{async_trait, fs::TempFile, tokio::io::AsyncReadExt};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,12 +2,13 @@ use super::foerdernd::FoerderndUser;
 | 
				
			|||||||
use super::regular::RegularUser;
 | 
					use super::regular::RegularUser;
 | 
				
			||||||
use super::unterstuetzend::UnterstuetzendUser;
 | 
					use super::unterstuetzend::UnterstuetzendUser;
 | 
				
			||||||
use super::{ManageUserUser, User};
 | 
					use super::{ManageUserUser, User};
 | 
				
			||||||
 | 
					use crate::NonEmptyString;
 | 
				
			||||||
use crate::model::activity::ActivityBuilder;
 | 
					use crate::model::activity::ActivityBuilder;
 | 
				
			||||||
use crate::model::role::Role;
 | 
					use crate::model::role::Role;
 | 
				
			||||||
use crate::NonEmptyString;
 | 
					 | 
				
			||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
 | 
					    SCHECKBUCH,
 | 
				
			||||||
    model::{mail::Mail, notification::Notification},
 | 
					    model::{mail::Mail, notification::Notification},
 | 
				
			||||||
    special_user, SCHECKBUCH,
 | 
					    special_user,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use chrono::NaiveDate;
 | 
					use chrono::NaiveDate;
 | 
				
			||||||
use rocket::async_trait;
 | 
					use rocket::async_trait;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,9 +4,9 @@ use super::scheckbuch::ScheckbuchUser;
 | 
				
			|||||||
use super::schnupperinterest::SchnupperInterestUser;
 | 
					use super::schnupperinterest::SchnupperInterestUser;
 | 
				
			||||||
use super::unterstuetzend::UnterstuetzendUser;
 | 
					use super::unterstuetzend::UnterstuetzendUser;
 | 
				
			||||||
use super::{ManageUserUser, User};
 | 
					use super::{ManageUserUser, User};
 | 
				
			||||||
 | 
					use crate::NonEmptyString;
 | 
				
			||||||
use crate::model::activity::ActivityBuilder;
 | 
					use crate::model::activity::ActivityBuilder;
 | 
				
			||||||
use crate::model::role::Role;
 | 
					use crate::model::role::Role;
 | 
				
			||||||
use crate::NonEmptyString;
 | 
					 | 
				
			||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    model::{mail::Mail, notification::Notification},
 | 
					    model::{mail::Mail, notification::Notification},
 | 
				
			||||||
    special_user,
 | 
					    special_user,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
use csv::ReaderBuilder;
 | 
					use csv::ReaderBuilder;
 | 
				
			||||||
use rocket::{form::Form, get, post, routes, FromForm, Route, State};
 | 
					use rocket::{FromForm, Route, State, form::Form, get, post, routes};
 | 
				
			||||||
use rocket_dyn_templates::{context, Template};
 | 
					use rocket_dyn_templates::{Template, context};
 | 
				
			||||||
use sqlx::SqlitePool;
 | 
					use sqlx::SqlitePool;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::model::{activity::Activity, role::Role, user::AdminUser};
 | 
					use crate::model::{activity::Activity, role::Role, user::AdminUser};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,11 +7,11 @@ use crate::{
 | 
				
			|||||||
        mail::valid_mails,
 | 
					        mail::valid_mails,
 | 
				
			||||||
        role::Role,
 | 
					        role::Role,
 | 
				
			||||||
        user::{
 | 
					        user::{
 | 
				
			||||||
 | 
					            AdminUser, AllowedToEditPaymentStatusUser, ManageUserUser, User, UserWithDetails,
 | 
				
			||||||
 | 
					            UserWithMembershipPdf, UserWithRolesAndMembershipPdf, VorstandUser,
 | 
				
			||||||
            clubmember::ClubMemberUser, foerdernd::FoerderndUser, member::Member,
 | 
					            clubmember::ClubMemberUser, foerdernd::FoerderndUser, member::Member,
 | 
				
			||||||
            regular::RegularUser, scheckbuch::ScheckbuchUser, schnupperant::SchnupperantUser,
 | 
					            regular::RegularUser, scheckbuch::ScheckbuchUser, schnupperant::SchnupperantUser,
 | 
				
			||||||
            schnupperinterest::SchnupperInterestUser, unterstuetzend::UnterstuetzendUser,
 | 
					            schnupperinterest::SchnupperInterestUser, unterstuetzend::UnterstuetzendUser,
 | 
				
			||||||
            AdminUser, AllowedToEditPaymentStatusUser, ManageUserUser, User, UserWithDetails,
 | 
					 | 
				
			||||||
            UserWithMembershipPdf, UserWithRolesAndMembershipPdf, VorstandUser,
 | 
					 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    tera::Config,
 | 
					    tera::Config,
 | 
				
			||||||
@@ -19,6 +19,7 @@ use crate::{
 | 
				
			|||||||
use chrono::NaiveDate;
 | 
					use chrono::NaiveDate;
 | 
				
			||||||
use futures::future::join_all;
 | 
					use futures::future::join_all;
 | 
				
			||||||
use rocket::{
 | 
					use rocket::{
 | 
				
			||||||
 | 
					    FromForm, Request, Route, State,
 | 
				
			||||||
    form::Form,
 | 
					    form::Form,
 | 
				
			||||||
    fs::TempFile,
 | 
					    fs::TempFile,
 | 
				
			||||||
    get,
 | 
					    get,
 | 
				
			||||||
@@ -26,9 +27,9 @@ use rocket::{
 | 
				
			|||||||
    post,
 | 
					    post,
 | 
				
			||||||
    request::{FlashMessage, FromRequest, Outcome},
 | 
					    request::{FlashMessage, FromRequest, Outcome},
 | 
				
			||||||
    response::{Flash, Redirect},
 | 
					    response::{Flash, Redirect},
 | 
				
			||||||
    routes, FromForm, Request, Route, State,
 | 
					    routes,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use rocket_dyn_templates::{tera::Context, Template};
 | 
					use rocket_dyn_templates::{Template, tera::Context};
 | 
				
			||||||
use sqlx::SqlitePool;
 | 
					use sqlx::SqlitePool;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Custom request guard to extract the Referer header
 | 
					// Custom request guard to extract the Referer header
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,5 @@
 | 
				
			|||||||
use rocket::{
 | 
					use rocket::{
 | 
				
			||||||
 | 
					    FromForm, Request, Route, State,
 | 
				
			||||||
    form::Form,
 | 
					    form::Form,
 | 
				
			||||||
    get,
 | 
					    get,
 | 
				
			||||||
    http::{Cookie, CookieJar},
 | 
					    http::{Cookie, CookieJar},
 | 
				
			||||||
@@ -8,9 +9,8 @@ use rocket::{
 | 
				
			|||||||
    response::{Flash, Redirect},
 | 
					    response::{Flash, Redirect},
 | 
				
			||||||
    routes,
 | 
					    routes,
 | 
				
			||||||
    time::{Duration, OffsetDateTime},
 | 
					    time::{Duration, OffsetDateTime},
 | 
				
			||||||
    FromForm, Request, Route, State,
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use rocket_dyn_templates::{context, tera, Template};
 | 
					use rocket_dyn_templates::{Template, context, tera};
 | 
				
			||||||
use sqlx::SqlitePool;
 | 
					use sqlx::SqlitePool;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::model::{
 | 
					use crate::model::{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -412,9 +412,7 @@
 | 
				
			|||||||
                            {% for activity in activities %}
 | 
					                            {% for activity in activities %}
 | 
				
			||||||
                                <li>
 | 
					                                <li>
 | 
				
			||||||
                                    <strong>{{ activity.created_at | date(format="%d. %m. %Y") }}:</strong> <small>{{ activity.text }}
 | 
					                                    <strong>{{ activity.created_at | date(format="%d. %m. %Y") }}:</strong> <small>{{ activity.text }}
 | 
				
			||||||
                                    {% if activity.keep_until_days %}
 | 
					                                        {% if activity.keep_until_days %}(⏳ {{ activity.keep_until_days }} Tage){% endif %}
 | 
				
			||||||
                                      (⏳ {{ activity.keep_until_days }} Tage)
 | 
					 | 
				
			||||||
                                      {% endif %}
 | 
					 | 
				
			||||||
                                    </small>
 | 
					                                    </small>
 | 
				
			||||||
                                </li>
 | 
					                                </li>
 | 
				
			||||||
                            {% else %}
 | 
					                            {% else %}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user