diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index c150a8254..70afad7c4 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -185,12 +185,33 @@ func GetAttributeViewKeysByAvID(avID string) (ret []*av.Key) { return ret } -func SetDatabaseBlockView(blockID, viewID string) (err error) { +func SetDatabaseBlockView(blockID, avID, viewID string) (err error) { + attrView, err := av.ParseAttributeView(avID) + if nil != err { + logging.LogErrorf("parse attribute view [%s] failed: %s", avID, err) + return + } + if attrView.ViewID != viewID { + attrView.ViewID = viewID + if err = av.SaveAttributeView(attrView); err != nil { + return + } + } + + view := attrView.GetView(viewID) + if nil == view { + err = av.ErrViewNotFound + logging.LogErrorf("view [%s] not found in attribute view [%s]", viewID, avID) + return + } + node, tree, err := getNodeByBlockID(nil, blockID) if err != nil { return } + node.AttributeViewType = string(view.LayoutType) + attrs := parse.IAL2Map(node.KramdownIAL) attrs[av.NodeAttrView] = viewID err = setNodeAttrs(node, tree, attrs)