From 5274c8d8da07d4ca51bda404791886277f204bf8 Mon Sep 17 00:00:00 2001 From: Aaron Fischer Date: Mon, 3 Apr 2017 21:50:41 +0200 Subject: [PATCH] Add edit images #8 --- resources/sql/queries.sql | 5 +++++ resources/templates/admin/upload.html | 18 +++++++++++++++-- src/clj/yenu/routes/admin.clj | 29 +++++++++++++++++++++++---- 3 files changed, 46 insertions(+), 6 deletions(-) diff --git a/resources/sql/queries.sql b/resources/sql/queries.sql index 570b95b..bf22c10 100644 --- a/resources/sql/queries.sql +++ b/resources/sql/queries.sql @@ -34,6 +34,11 @@ WHERE created_at < :image-date ORDER BY created_at DESC LIMIT 1 +-- :name edit-image! :! :1 +UPDATE images +SET title = :title, description = :description +WHERE id = :id + -- :name create-tag! :i! INSERT OR IGNORE INTO tags (tagname) diff --git a/resources/templates/admin/upload.html b/resources/templates/admin/upload.html index da6a554..44cabe5 100644 --- a/resources/templates/admin/upload.html +++ b/resources/templates/admin/upload.html @@ -1,39 +1,53 @@ {% extends "layout.html" %} {% block content %} +{% if image %} +

Bild editieren

+

Hier kann ein bestehendes Bild bearbeitet werden. Das Bild selbst kann nicht + verändert werden (hierzu muss das Bild gelöscht und neu angelegt werden)

+{% else %}

Bild hochladen

Hier kann ein neues Bild der Gallerie hinzugefügt werden. Dabei sind alle gängigen Bildformate und Auflösungen möglich. Das hochgeladene Bild wird zugeschnitten (Thumbnail) und skaliert (Detailseite).

+{% endif %} -
+ {% csrf-field %} + {% if not image %}
+ {% endif %}
- +
{% endblock %} diff --git a/src/clj/yenu/routes/admin.clj b/src/clj/yenu/routes/admin.clj index a36de0b..5584f9e 100644 --- a/src/clj/yenu/routes/admin.clj +++ b/src/clj/yenu/routes/admin.clj @@ -28,11 +28,14 @@ (let [{tag-id :id} (db/get-tag {:tagname tag})] (db/add-tag-to-image! {:imageid image-id :tagid tag-id}))) +(defn add-tags-for-image [image-id tag-string] + (let [all-tags (str/split tag-string, #"(\s*,\s*|\s+)")] + (run! #(add-tag image-id %) all-tags))) + (defn add-image-to-database [filehash title description tags] (let [img (db/create-image! {:hash filehash :title title :description description}) - image-id ((keyword "last_insert_rowid()") img) - all-tags (str/split tags, #"(\s*,\s*|\s+)")] - (run! #(add-tag image-id %) all-tags))) + image-id ((keyword "last_insert_rowid()") img)] + (add-tags-for-image image-id tags))) (defn delete-image! [id request] (let [image (db/get-image {:id id})] @@ -45,6 +48,16 @@ (let [comments (db/get-recent-comments {:num-comments 20})] (layout/render "comments.html" {:comments comments}))) +(defn edit-image-form [id request] + (let [image (db/get-image {:id id}) + tags (db/get-tags-for-image {:id id})] + (layout/render "admin/upload.html" {:image image :tags tags}))) + +(defn edit-image! [id title description tags request] + (db/edit-image! {:id id :title title :description description}) + (db/delete-image-tags! {:id id}) + (add-tags-for-image id tags)) + (defroutes admin-routes (GET "/upload" [:as request] (-> (layout/render @@ -60,7 +73,15 @@ (GET "/delete/:id" [id :as request] (delete-image! id request) (-> (redirect "/page/1") - (assoc :flash {:message "Bild wurde gelöscht" :type "success"}))) + (assoc :flash {:message "Bild wurde gelöscht" :type "danger"}))) + + (GET "/edit/:id" [id :as request] + (edit-image-form id request)) + + (POST "/edit/:id" [id title description tags :as request] + (edit-image! id title description tags request) + (-> (redirect (str "/show/" id)) + (assoc :flash {:message "Bild wurde bearbeitet" :type "success"}))) (GET "/statistics" [] (layout/render "statistics.html"))