From b892dbfd389939eb1daf9da71d84da98f32064f3 Mon Sep 17 00:00:00 2001 From: Denis Arh Date: Thu, 26 Sep 2019 00:28:30 +0200 Subject: [PATCH] Add support for exp/imp calendar module refs --- compose/commands/exporter.go | 35 +++++++++++++++++++++++++++++++++-- compose/importer/page.go | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/compose/commands/exporter.go b/compose/commands/exporter.go index 68110ed92..fa82108d2 100644 --- a/compose/commands/exporter.go +++ b/compose/commands/exporter.go @@ -58,8 +58,16 @@ func Exporter(ctx context.Context, c *cli.Config) *cobra.Command { } } - roles, err = service.DefaultSystemRole.Find(ctx) - cli.HandleError(err) + // roles, err = service.DefaultSystemRole.Find(ctx) + // cli.HandleError(err) + // At the moment, we can not load roles from system service + // so we'll just use static set of known roles + // + // Roles are use for resolving access control + roles = sysTypes.RoleSet{ + &sysTypes.Role{ID: 1, Handle: "everyone"}, + &sysTypes.Role{ID: 2, Handle: "admins"}, + } modules, _, err := service.DefaultModule.Find(types.ModuleFilter{NamespaceID: ns.ID}) cli.HandleError(err) @@ -473,6 +481,29 @@ func expPageBlocks(in types.PageBlocks, pages types.PageSet, modules types.Modul }) out[i].Options["buttons"] = bb + } else if out[i].Kind == "Calendar" { + ff := make([]interface{}, 0) + _ = deinterfacer.Each(out[i].Options["feeds"], func(_ int, _ string, def interface{}) error { + feed := map[string]interface{}{} + + _ = deinterfacer.Each(def, func(_ int, k string, v interface{}) error { + switch k { + case "moduleID": + if module := modules.FindByID(deinterfacer.ToUint64(v)); module != nil { + feed["module"] = makeHandleFromName(module.Name, module.Handle, "module-%d", module.ID) + } + default: + feed[k] = v + } + + return nil + }) + + ff = append(ff, feed) + return nil + }) + + out[i].Options["feeds"] = ff } } diff --git a/compose/importer/page.go b/compose/importer/page.go index e3f5e91be..2695e6169 100644 --- a/compose/importer/page.go +++ b/compose/importer/page.go @@ -396,6 +396,40 @@ func (pImp *Page) resolveRefs(page *types.Page) error { b.Options["buttons"] = bb + if err != nil { + return err + } + } else if b.Kind == "Calendar" { + ff := make([]interface{}, 0) + err := deinterfacer.Each(b.Options["feeds"], func(_ int, _ string, def interface{}) (err error) { + feed := map[string]interface{}{} + + err = deinterfacer.Each(def, func(_ int, k string, v interface{}) error { + switch k { + case "module": + if m, err := pImp.getModule(deinterfacer.ToString(v)); err != nil || m == nil { + return errors.Errorf("could not load module %q for page %q block #%d (%v)", + v, page.Handle, i+1, err) + } else { + feed["moduleID"] = m.ID + } + default: + feed[k] = v + } + + return nil + }) + + if err != nil { + return err + } + + ff = append(ff, feed) + return nil + }) + + b.Options["feeds"] = ff + if err != nil { return err }