User profile edition
This commit is contained in:
parent
3d5d03dc08
commit
ea08718c23
@ -69,6 +69,8 @@ fn main() {
|
||||
|
||||
routes::user::me,
|
||||
routes::user::details,
|
||||
routes::user::edit,
|
||||
routes::user::update,
|
||||
routes::user::follow,
|
||||
routes::user::activity_details,
|
||||
routes::user::outbox,
|
||||
|
@ -76,6 +76,17 @@ impl User {
|
||||
.expect("Error saving new user")
|
||||
}
|
||||
|
||||
pub fn update(&self, conn: &PgConnection, name: String, email: String, summary: String) -> User {
|
||||
diesel::update(self)
|
||||
.set((
|
||||
users::display_name.eq(name),
|
||||
users::email.eq(email),
|
||||
users::summary.eq(summary),
|
||||
)).load::<User>(conn)
|
||||
.expect("Couldn't update user")
|
||||
.into_iter().nth(0).unwrap()
|
||||
}
|
||||
|
||||
pub fn get(conn: &PgConnection, id: i32) -> Option<User> {
|
||||
users::table.filter(users::id.eq(id))
|
||||
.limit(1)
|
||||
|
@ -61,6 +61,34 @@ fn new(user: Option<User>) -> Template {
|
||||
}))
|
||||
}
|
||||
|
||||
#[get("/@/<name>/edit")]
|
||||
fn edit(name: String, user: User) -> Option<Template> {
|
||||
if user.username == name && !name.contains("@") {
|
||||
Some(Template::render("users/edit", json!({
|
||||
"account": user
|
||||
})))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(FromForm)]
|
||||
struct UpdateUserForm {
|
||||
display_name: Option<String>,
|
||||
email: Option<String>,
|
||||
summary: Option<String>,
|
||||
}
|
||||
|
||||
#[put("/@/<_name>/edit", data = "<data>")]
|
||||
fn update(_name: String, conn: DbConn, user: User, data: Form<UpdateUserForm>) -> Redirect {
|
||||
user.update(&*conn,
|
||||
data.get().display_name.clone().unwrap_or(user.display_name.to_string()).to_string(),
|
||||
data.get().email.clone().unwrap_or(user.email.clone().unwrap()).to_string(),
|
||||
data.get().summary.clone().unwrap_or(user.summary.to_string())
|
||||
);
|
||||
Redirect::to("/me")
|
||||
}
|
||||
|
||||
#[derive(FromForm)]
|
||||
struct NewUserForm {
|
||||
username: String,
|
||||
|
24
templates/users/edit.tera
Normal file
24
templates/users/edit.tera
Normal file
@ -0,0 +1,24 @@
|
||||
{% extends "base" %}
|
||||
|
||||
{% block title %}
|
||||
Edit your account
|
||||
{% endblock title %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Your Profile</h1>
|
||||
<form method="post">
|
||||
<!-- Rocket hack to use various HTTP methods -->
|
||||
<input type=hidden name="_method" value="put">
|
||||
|
||||
<label for="display_name">Display Name</label>
|
||||
<input name="display_name" value="{{ account.display_name }}">
|
||||
|
||||
<label for="email">Email</label>
|
||||
<input name="email" value="{{ account.email }}">
|
||||
|
||||
<label for="summary">Summary</label>
|
||||
<input name="summary" value="{{ account.summary }}">
|
||||
|
||||
<input type="submit" value="Update account"/>
|
||||
</form>
|
||||
{% endblock content %}
|
Loading…
Reference in New Issue
Block a user