Edit posts
This commit is contained in:
		
							parent
							
								
									413e34ac0e
								
							
						
					
					
						commit
						3918bd4501
					
				| @ -281,29 +281,32 @@ impl Post { | |||||||
|         act |         act | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn handle_update(&mut self, conn: &PgConnection, updated: Article) { |     pub fn handle_update(conn: &PgConnection, updated: Article) { | ||||||
|  |         let id = updated.object_props.id_string().expect("Post::handle_update: id error"); | ||||||
|  |         let mut post = Post::find_by_ap_url(conn, id).unwrap(); | ||||||
|  | 
 | ||||||
|         if let Ok(title) = updated.object_props.name_string() { |         if let Ok(title) = updated.object_props.name_string() { | ||||||
|             self.slug = title.to_kebab_case(); |             post.slug = title.to_kebab_case(); | ||||||
|             self.title = title; |             post.title = title; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if let Ok(content) = updated.object_props.content_string() { |         if let Ok(content) = updated.object_props.content_string() { | ||||||
|             self.content = SafeString::new(&content); |             post.content = SafeString::new(&content); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if let Ok(subtitle) = updated.object_props.summary_string() { |         if let Ok(subtitle) = updated.object_props.summary_string() { | ||||||
|             self.subtitle = subtitle; |             post.subtitle = subtitle; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if let Ok(ap_url) = updated.object_props.url_string() { |         if let Ok(ap_url) = updated.object_props.url_string() { | ||||||
|             self.ap_url = ap_url; |             post.ap_url = ap_url; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if let Ok(source) = updated.ap_object_props.source_object::<Source>() { |         if let Ok(source) = updated.ap_object_props.source_object::<Source>() { | ||||||
|             self.source = source.content; |             post.source = source.content; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         self.update(conn); |         post.update(conn); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn to_json(&self, conn: &PgConnection) -> serde_json::Value { |     pub fn to_json(&self, conn: &PgConnection) -> serde_json::Value { | ||||||
|  | |||||||
							
								
								
									
										3
									
								
								po/de.po
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								po/de.po
									
									
									
									
									
								
							| @ -549,5 +549,8 @@ msgstr "" | |||||||
| msgid "Articles tagged \"{{ tag }}\"" | msgid "Articles tagged \"{{ tag }}\"" | ||||||
| msgstr "Über {{ instance_name }}" | msgstr "Über {{ instance_name }}" | ||||||
| 
 | 
 | ||||||
|  | msgid "Edit" | ||||||
|  | msgstr "" | ||||||
|  | 
 | ||||||
| #~ msgid "Your password should be at least 8 characters long" | #~ msgid "Your password should be at least 8 characters long" | ||||||
| #~ msgstr "Das Passwort sollte mindestens 8 Zeichen lang sein" | #~ msgstr "Das Passwort sollte mindestens 8 Zeichen lang sein" | ||||||
|  | |||||||
							
								
								
									
										3
									
								
								po/en.po
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								po/en.po
									
									
									
									
									
								
							| @ -535,3 +535,6 @@ msgstr "" | |||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Articles tagged \"{{ tag }}\"" | msgid "Articles tagged \"{{ tag }}\"" | ||||||
| msgstr "Welcome on {{ instance_name }}" | msgstr "Welcome on {{ instance_name }}" | ||||||
|  | 
 | ||||||
|  | msgid "Edit" | ||||||
|  | msgstr "" | ||||||
|  | |||||||
							
								
								
									
										3
									
								
								po/fr.po
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								po/fr.po
									
									
									
									
									
								
							| @ -543,3 +543,6 @@ msgstr "Tout afficher" | |||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Articles tagged \"{{ tag }}\"" | msgid "Articles tagged \"{{ tag }}\"" | ||||||
| msgstr "Articles de {{ instance.name }}" | msgstr "Articles de {{ instance.name }}" | ||||||
|  | 
 | ||||||
|  | msgid "Edit" | ||||||
|  | msgstr "" | ||||||
|  | |||||||
							
								
								
									
										3
									
								
								po/gl.po
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								po/gl.po
									
									
									
									
									
								
							| @ -539,3 +539,6 @@ msgstr "" | |||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Articles tagged \"{{ tag }}\"" | msgid "Articles tagged \"{{ tag }}\"" | ||||||
| msgstr "Acerca de {{ instance_name }}" | msgstr "Acerca de {{ instance_name }}" | ||||||
|  | 
 | ||||||
|  | msgid "Edit" | ||||||
|  | msgstr "" | ||||||
|  | |||||||
							
								
								
									
										3
									
								
								po/nb.po
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								po/nb.po
									
									
									
									
									
								
							| @ -553,6 +553,9 @@ msgstr "" | |||||||
| msgid "Articles tagged \"{{ tag }}\"" | msgid "Articles tagged \"{{ tag }}\"" | ||||||
| msgstr "Om {{ instance_name }}" | msgstr "Om {{ instance_name }}" | ||||||
| 
 | 
 | ||||||
|  | msgid "Edit" | ||||||
|  | msgstr "" | ||||||
|  | 
 | ||||||
| #~ msgid "One reshare" | #~ msgid "One reshare" | ||||||
| #~ msgid_plural "{{ count }} reshares" | #~ msgid_plural "{{ count }} reshares" | ||||||
| #~ msgstr[0] "Én deling" | #~ msgstr[0] "Én deling" | ||||||
|  | |||||||
							
								
								
									
										3
									
								
								po/pl.po
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								po/pl.po
									
									
									
									
									
								
							| @ -552,6 +552,9 @@ msgstr "" | |||||||
| msgid "Articles tagged \"{{ tag }}\"" | msgid "Articles tagged \"{{ tag }}\"" | ||||||
| msgstr "O {{ instance_name }}" | msgstr "O {{ instance_name }}" | ||||||
| 
 | 
 | ||||||
|  | msgid "Edit" | ||||||
|  | msgstr "" | ||||||
|  | 
 | ||||||
| #~ msgid "One reshare" | #~ msgid "One reshare" | ||||||
| #~ msgid_plural "{{ count }} reshares" | #~ msgid_plural "{{ count }} reshares" | ||||||
| #~ msgstr[0] "Jedno udostępnienie" | #~ msgstr[0] "Jedno udostępnienie" | ||||||
|  | |||||||
| @ -522,3 +522,6 @@ msgstr "" | |||||||
| 
 | 
 | ||||||
| msgid "Articles tagged \"{{ tag }}\"" | msgid "Articles tagged \"{{ tag }}\"" | ||||||
| msgstr "" | msgstr "" | ||||||
|  | 
 | ||||||
|  | msgid "Edit" | ||||||
|  | msgstr "" | ||||||
|  | |||||||
| @ -86,6 +86,8 @@ fn main() { | |||||||
|             routes::posts::details, |             routes::posts::details, | ||||||
|             routes::posts::details_response, |             routes::posts::details_response, | ||||||
|             routes::posts::activity_details, |             routes::posts::activity_details, | ||||||
|  |             routes::posts::edit, | ||||||
|  |             routes::posts::update, | ||||||
|             routes::posts::new, |             routes::posts::new, | ||||||
|             routes::posts::new_auth, |             routes::posts::new_auth, | ||||||
|             routes::posts::create, |             routes::posts::create, | ||||||
|  | |||||||
| @ -107,6 +107,7 @@ fn edit(blog: String, slug: String, user: User, conn: DbConn) -> Template { | |||||||
|             "error_message": "You are not author in this blog." |             "error_message": "You are not author in this blog." | ||||||
|         })) |         })) | ||||||
|     } else { |     } else { | ||||||
|  |         println!("Source: {}", post.source.clone()); | ||||||
|         Template::render("posts/new", json!({ |         Template::render("posts/new", json!({ | ||||||
|             "account": user.to_json(&*conn), |             "account": user.to_json(&*conn), | ||||||
|             "instance": Instance::get_local(&*conn), |             "instance": Instance::get_local(&*conn), | ||||||
| @ -130,7 +131,7 @@ fn edit(blog: String, slug: String, user: User, conn: DbConn) -> Template { | |||||||
| #[post("/~/<blog>/<slug>/edit", data = "<data>")] | #[post("/~/<blog>/<slug>/edit", data = "<data>")] | ||||||
| fn update(blog: String, slug: String, user: User, conn: DbConn, data: LenientForm<NewPostForm>, worker: State<Pool<ThunkWorker<()>>>) -> Result<Redirect, Template> { | fn update(blog: String, slug: String, user: User, conn: DbConn, data: LenientForm<NewPostForm>, worker: State<Pool<ThunkWorker<()>>>) -> Result<Redirect, Template> { | ||||||
|     let b = Blog::find_by_fqn(&*conn, blog.to_string()); |     let b = Blog::find_by_fqn(&*conn, blog.to_string()); | ||||||
|     let mut post = b.clone().and_then(|blog| Post::find_by_slug(&*conn, slug, blog.id)).expect("Post to update not found"); |     let mut post = b.clone().and_then(|blog| Post::find_by_slug(&*conn, slug.clone(), blog.id)).expect("Post to update not found"); | ||||||
| 
 | 
 | ||||||
|     let form = data.get(); |     let form = data.get(); | ||||||
|     let new_slug = form.title.to_string().to_kebab_case(); |     let new_slug = form.title.to_string().to_kebab_case(); | ||||||
| @ -139,12 +140,15 @@ fn update(blog: String, slug: String, user: User, conn: DbConn, data: LenientFor | |||||||
|         Ok(_) => ValidationErrors::new(), |         Ok(_) => ValidationErrors::new(), | ||||||
|         Err(e) => e |         Err(e) => e | ||||||
|     }; |     }; | ||||||
|     if let Some(_) = Post::find_by_slug(&*conn, new_slug.clone(), b.unwrap().id) { | 
 | ||||||
|         errors.add("title", ValidationError { |     if new_slug != slug { | ||||||
|             code: Cow::from("existing_slug"), |         if let Some(_) = Post::find_by_slug(&*conn, new_slug.clone(), b.clone().unwrap().id) { | ||||||
|             message: Some(Cow::from("A post with the same title already exists.")), |             errors.add("title", ValidationError { | ||||||
|             params: HashMap::new() |                 code: Cow::from("existing_slug"), | ||||||
|         }); |                 message: Some(Cow::from("A post with the same title already exists.")), | ||||||
|  |                 params: HashMap::new() | ||||||
|  |             }); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if errors.is_empty() { |     if errors.is_empty() { | ||||||
| @ -187,13 +191,13 @@ fn update(blog: String, slug: String, user: User, conn: DbConn, data: LenientFor | |||||||
|             let followers = user.get_followers(&*conn); |             let followers = user.get_followers(&*conn); | ||||||
|             worker.execute(Thunk::of(move || broadcast(&user, act, followers))); |             worker.execute(Thunk::of(move || broadcast(&user, act, followers))); | ||||||
| 
 | 
 | ||||||
|             Ok(Redirect::to(uri!(details: blog = blog, slug = slug))) |             Ok(Redirect::to(uri!(details: blog = blog, slug = new_slug))) | ||||||
|         } |         } | ||||||
|     } else { |     } else { | ||||||
|         Err(Template::render("posts/new", json!({ |         Err(Template::render("posts/new", json!({ | ||||||
|             "account": user.to_json(&*conn), |             "account": user.to_json(&*conn), | ||||||
|             "instance": Instance::get_local(&*conn), |             "instance": Instance::get_local(&*conn), | ||||||
|             "editing": false, |             "editing": true, | ||||||
|             "errors": errors.inner(), |             "errors": errors.inner(), | ||||||
|             "form": form |             "form": form | ||||||
|         }))) |         }))) | ||||||
|  | |||||||
| @ -24,6 +24,8 @@ | |||||||
|         — |         — | ||||||
|         <span class="date">{{ date | date(format="%B %e, %Y") }}</span> |         <span class="date">{{ date | date(format="%B %e, %Y") }}</span> | ||||||
|         {% if is_author %} |         {% if is_author %} | ||||||
|  |             — | ||||||
|  |             <a href="{{ article.url}}edit">{{ "Edit" | _ }}</a> | ||||||
|             — |             — | ||||||
|             <a href="{{ article.url}}delete" onclick="return confirm('Are you sure you?')">{{ "Delete this article" | _ }}</a> |             <a href="{{ article.url}}delete" onclick="return confirm('Are you sure you?')">{{ "Delete this article" | _ }}</a> | ||||||
|         {% endif %} |         {% endif %} | ||||||
|  | |||||||
| @ -2,11 +2,21 @@ | |||||||
| {% import "macros" as macros %} | {% import "macros" as macros %} | ||||||
| 
 | 
 | ||||||
| {% block title %} | {% block title %} | ||||||
| {{ "New post" | _ }} |     {% if editing %} | ||||||
|  |         {{ "Edit {{ post }}" | _(post=form.title) }} | ||||||
|  |     {% else %} | ||||||
|  |         {{ "New post" | _ }} | ||||||
|  |     {% endif %} | ||||||
| {% endblock title %} | {% endblock title %} | ||||||
| 
 | 
 | ||||||
| {% block content %} | {% block content %} | ||||||
| <h1>{{ "Create a post" | _ }}</h1> | <h1> | ||||||
|  |     {% if editing %} | ||||||
|  |         {{ "Edit {{ post }}" | _(post=form.title) }} | ||||||
|  |     {% else %} | ||||||
|  |         {{ "Create a post" | _ }} | ||||||
|  |     {% endif %} | ||||||
|  | </h1> | ||||||
| <form class="new-post" method="post"> | <form class="new-post" method="post"> | ||||||
|     {{ macros::input(name="title", label="Title", errors=errors, form=form, props="required") }} |     {{ macros::input(name="title", label="Title", errors=errors, form=form, props="required") }} | ||||||
|     {{ macros::input(name="subtitle", label="Subtitle", errors=errors, form=form, optional=true) }} |     {{ macros::input(name="subtitle", label="Subtitle", errors=errors, form=form, optional=true) }} | ||||||
| @ -18,14 +28,18 @@ | |||||||
|     {% endif %} |     {% endif %} | ||||||
| 
 | 
 | ||||||
|     <label for="content">{{ "Content" | _ }}<small>{{ "Markdown is supported" | _ }}</small></label> |     <label for="content">{{ "Content" | _ }}<small>{{ "Markdown is supported" | _ }}</small></label> | ||||||
|     <textarea id="content" name="content" value="{{ form.content | default(value="") }}" rows="20"></textarea> |     <textarea id="content" name="content" rows="20">{{ form.content | default(value="") }}</textarea> | ||||||
| 
 | 
 | ||||||
|     {{ macros::input(name="tags", label="Tags, separated by commas", errors=errors, form=form, optional=true) }} |     {{ macros::input(name="tags", label="Tags, separated by commas", errors=errors, form=form, optional=true) }} | ||||||
| 
 | 
 | ||||||
|     {% set license_infos = "Default license will be {{ instance.default_license }}" | _(instance=instance) %} |     {% set license_infos = "Default license will be {{ instance.default_license }}" | _(instance=instance) %} | ||||||
|     {{ macros::input(name="license", label="License", errors=errors, form=form, optional=true, details=license_infos) }} |     {{ macros::input(name="license", label="License", errors=errors, form=form, optional=true, details=license_infos) }} | ||||||
| 
 | 
 | ||||||
|     <input type="submit" value="{{ "Publish" | _ }}" /> |     {% if editing %} | ||||||
|  |         <input type="submit" value="{{ "Update" | _ }}" /> | ||||||
|  |     {% else %} | ||||||
|  |         <input type="submit" value="{{ "Publish" | _ }}" /> | ||||||
|  |     {% endif %} | ||||||
| </form> | </form> | ||||||
| <script src="/static/js/autoExpand.js"></script> | <script src="/static/js/autoExpand.js"></script> | ||||||
| {% endblock content %} | {% endblock content %} | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user