diff --git a/assets/static/js/main.js b/assets/static/js/main.js
index 41f1663..9fbc2b7 100644
--- a/assets/static/js/main.js
+++ b/assets/static/js/main.js
@@ -192,21 +192,21 @@ function bm_type_field_undelete(sender, type_field_id) {
document.getElementById('Field-' + type_field_id).classList.remove('field-opaque');
}
-function bm_item_relation_delete(sender, relation_name, relation_name_remove) {
- document.getElementById(relation_name_remove).value = '1';
+function bm_element_list_delete(sender, element_name, element_name_remove) {
+ document.getElementById(element_name_remove).value = '1';
sender.hidden = true;
- document.getElementById('Undelete-' + relation_name).hidden = false;
- var x = document.getElementsByClassName(relation_name + "-Col");
+ document.getElementById('Undelete-' + element_name).hidden = false;
+ var x = document.getElementsByClassName(element_name + "-Col");
for (var i = 0; i < x.length; i++) {
x[i].classList.add("field-opaque");
}
}
-function bm_item_relation_undelete(sender, relation_name, relation_name_remove) {
- document.getElementById(relation_name_remove).value = '';
+function bm_element_list_undelete(sender, element_name, element_name_remove) {
+ document.getElementById(element_name_remove).value = '';
sender.hidden = true;
- document.getElementById('Delete-' + relation_name).hidden = false;
- var x = document.getElementsByClassName(relation_name + "-Col");
+ document.getElementById('Delete-' + element_name).hidden = false;
+ var x = document.getElementsByClassName(element_name + "-Col");
for (var i = 0; i < x.length; i++) {
x[i].classList.remove("field-opaque");
}
diff --git a/assets/templates/items/form.tmpl b/assets/templates/items/form.tmpl
index c0b04f3..c791662 100644
--- a/assets/templates/items/form.tmpl
+++ b/assets/templates/items/form.tmpl
@@ -6,7 +6,7 @@
{{ end }}
{{ $shares_present := false }}
-{{ if (gt (len (index .item.FieldsSection "fields")) 0) }}
+{{ if (gt (len .item.Shares) 0) }}
{{ $shares_present = true }}
{{ end }}
@@ -18,7 +18,7 @@
Fields
{{ end }}
Relations
- {{ if $fields_present }}
+ {{ if $shares_present }}
Shares
{{ end }}
@@ -108,9 +108,9 @@
{{ if $shares_present }}
-
+
- {{ template "items:shares"}}
+ {{ template "item:shares" .}}
{{ end }}
diff --git a/assets/templates/items/relations.tmpl b/assets/templates/items/relations.tmpl
index 6ed0f46..ecfe317 100644
--- a/assets/templates/items/relations.tmpl
+++ b/assets/templates/items/relations.tmpl
@@ -51,8 +51,8 @@
{{ widget_relation_type $relation_name $relation_type `id="$relation_name"` }} |
-
-
+
+
|
{{ end }}
diff --git a/assets/templates/items/shares.tmpl b/assets/templates/items/shares.tmpl
index cec6e95..cd8cc70 100644
--- a/assets/templates/items/shares.tmpl
+++ b/assets/templates/items/shares.tmpl
@@ -2,57 +2,34 @@
- Item |
- Categories |
- Tags |
- Relation type |
+ Token |
+ Edit |
+ State date time |
+ End date time |
|
-{{ range .item.Relations}}
-{{ $relation_name := printf "%s%v-%v" "ItemRelation-" .Item_id .Related_item_id }}
-{{ $relation_name_remove := printf "%s%v-%v" "ItemRelation-ToRemove-" .Item_id .Related_item_id }}
-
-
- {{ $target_id := .Related_item_id}}
- {{ $relation_type := .Relation_type }}
- {{ if eq .Related_item_id $.item.Id }}
- {{ $target_id = .Item_id}}
- {{ if eq "Parent" .Relation_type}}
- {{ $relation_type = "Child" }}
- {{ else if eq "Child" .Relation_type}}
- {{ $relation_type = "Parent" }}
- {{ end }}
- {{ end }}
- {{.Title}}
-
+{{ range .item.Shares}}
+{{ $share_name := printf "%s%v" "Share-" .Id }}
+{{ $share_name_remove := printf "%s%v" "ItemShare-ToRemove-" .Id }}
+ |
+
+ {{ .Token }}
+
|
-
- {{ if gt (len .Categories) 0 }}
-
- {{ range (stringToArray .Categories "|")}}
- {{ $category_name := index $.categoriesMap .}}
-
- {{ $category_name }}
-
- {{ end }}
- {{ end }}
+ |
+ {{ .PermissionEdit }}
|
-
- {{ if gt (len .Tags) 0 }}
-
- {{ range (stringToArray .Tags ",")}}
-
- {{ . }}
-
- {{ end }}
- {{ end }}
+ |
+ {{ .StartDatetime }}
+ |
+
+ {{ .EndDatetime }}
|
- {{ widget_relation_type $relation_name $relation_type `id="$relation_name"` }} |
-
-
+
+
|
{{ end }}
diff --git a/cmd/web/items_handlers.go b/cmd/web/items_handlers.go
index 3517813..0708d54 100644
--- a/cmd/web/items_handlers.go
+++ b/cmd/web/items_handlers.go
@@ -742,7 +742,7 @@ func (app *application) itemUpdate(w http.ResponseWriter, r *http.Request) {
if r.Header.Get("HX-Request") == "true" {
- err := response.HXFragment(fullBuf, []string{"items/form.tmpl", "items/fields.tmpl", "items/relations.tmpl"}, "page:content", data)
+ err := response.HXFragment(fullBuf, []string{"items/form.tmpl", "items/fields.tmpl", "items/relations.tmpl", "items/shares.tmpl"}, "page:content", data)
if err != nil {
app.serverError(w, r, err)
}
@@ -755,7 +755,7 @@ func (app *application) itemUpdate(w http.ResponseWriter, r *http.Request) {
w.Header().Add("HX-Trigger-After-Settle", `{"activateEasyMDE":"item-description"}`)
fullBuf.WriteTo(w)
} else {
- err := response.Page(w, http.StatusOK, data, []string{"items/update_title.tmpl", "items/form.tmpl", "items/fields.tmpl", "items/relations.tmpl", "items/form_jscode.tmpl"})
+ err := response.Page(w, http.StatusOK, data, []string{"items/update_title.tmpl", "items/form.tmpl", "items/fields.tmpl", "items/relations.tmpl", "items/shares.tmpl", "items/form_jscode.tmpl"})
if err != nil {
app.serverError(w, r, err)
}
@@ -833,6 +833,14 @@ func (app *application) itemUpdate(w http.ResponseWriter, r *http.Request) {
itemModel.UpdateRelation(item_id, related_item_id, values[0])
}
}
+ shareId, found := strings.CutPrefix(name, "ItemShare-ToRemove-")
+ if found && len(values) > 0 {
+ valuesRemove, isMapContainsKey := r.PostForm["ItemShare-ToRemove-"+shareId]
+ if isMapContainsKey && valuesRemove[0] == "1" {
+ shareIdInt, _ := strconv.ParseInt(shareId, 10, 64)
+ itemModel.DeleteShare(shareIdInt)
+ }
+ }
}
for type_field_id, values := range fieldsValues {
@@ -843,12 +851,14 @@ func (app *application) itemUpdate(w http.ResponseWriter, r *http.Request) {
itemModel.SaveKeywords(item, &fields, fieldsValues)
relations, _, _ := itemModel.GetRelations(item.Id)
+ shares, _, _ := itemModel.GetShares(item.Id)
data["item"] = itemForm{
Title: item.Title,
Type_icon: item.Type_icon,
Type_title: item.Type_title,
Relations: relations,
+ Shares: shares,
}
data["FieldsSection"] = fieldsSection
@@ -872,6 +882,11 @@ func (app *application) itemUpdate(w http.ResponseWriter, r *http.Request) {
app.serverError(w, r, err)
}
+ err = response.HXFragmentOOB(fullBuf, []string{"items/shares.tmpl"}, "item:shares", data, "shares")
+ if err != nil {
+ app.serverError(w, r, err)
+ }
+
data["uisection"] = "general"
err = response.HXFragmentOOB(fullBuf, []string{"items/fields.tmpl"}, "items:fields", data, "fields-general")
if err != nil {
diff --git a/models/item.go b/models/item.go
index aacbaa8..4595b67 100644
--- a/models/item.go
+++ b/models/item.go
@@ -444,6 +444,19 @@ func (model *ItemModel) DeleteRelation(id int64, related_id int64) error {
return nil
}
+func (model *ItemModel) DeleteShare(shareId int64) error {
+ ctx, cancel := database.GetContext()
+ defer cancel()
+
+ query := `DELETE FROM bm_item_shares WHERE id=$1`
+ _, err := model.DB.ExecContext(ctx, query, shareId)
+
+ if err != nil {
+ return err
+ }
+ return nil
+}
+
func (model *ItemModel) GetRelations(id int64) ([]ItemRelation, bool, error) {
ctx, cancel := database.GetContext()
defer cancel()