diff --git a/server/repo/content/repoNode.go b/server/repo/content/repoNode.go index d0d6361..6d82519 100644 --- a/server/repo/content/repoNode.go +++ b/server/repo/content/repoNode.go @@ -12,7 +12,7 @@ type RepoNode struct { Regions []string `json:"regions"` URIs map[string]map[string]string `json:"URIs"` DestinationIds map[string]map[string]string `json:"destinationIds"` - Names map[string]string `json:"names"` + Names map[string]map[string]string `json:"names"` Hidden bool `json:"hidden"` // hidden in tree Groups []string `json:"groups"` Data map[string]interface{} `json:"data"` @@ -86,7 +86,7 @@ func (node *RepoNode) GetPath(region string, language string) []*Item { func (node *RepoNode) ToItem(region string, language string) *Item { item := NewItem() item.Id = node.Id - item.Name = node.GetName(language) + item.Name = node.GetName(region, language) //todo handle destinationIds .... item.URI = node.URIs[region][language] return item @@ -101,8 +101,8 @@ func (node *RepoNode) AddNode(name string, childNode *RepoNode) *RepoNode { return node } -func (node *RepoNode) GetName(language string) string { - return node.Names[language] +func (node *RepoNode) GetName(region string, language string) string { + return node.Names[region][language] } func (node *RepoNode) IsOneOfTheseMimeTypes(mimeTypes []string) bool { @@ -118,6 +118,22 @@ func (node *RepoNode) IsOneOfTheseMimeTypes(mimeTypes []string) bool { } } +func (node *RepoNode) CanBeAccessedByGroups(groups []string) bool { + if len(groups) == 0 { + return true + } else { + // @todo is there sth like in_array ... or some array intersection + for _, group := range groups { + for _, myGroup := range node.Groups { + if group == myGroup { + return true + } + } + } + return false + } +} + func (node *RepoNode) PrintNode(id string, level int) { prefix := strings.Repeat(INDENT, level) fmt.Printf("%s %s:\n", prefix, id) diff --git a/server/repo/repo.go b/server/repo/repo.go index a2bc7a0..3da5eba 100644 --- a/server/repo/repo.go +++ b/server/repo/repo.go @@ -93,18 +93,18 @@ func (repo *Repo) GetURI(region string, language string, id string) string { return "" } -func (repo *Repo) GetNode(repoNode *content.RepoNode, expanded bool, mimeTypes []string, path []*content.Item, level int, region string, language string) *content.Node { +func (repo *Repo) GetNode(repoNode *content.RepoNode, expanded bool, mimeTypes []string, path []*content.Item, level int, groups []string, region string, language string) *content.Node { node := content.NewNode() node.Item = repoNode.ToItem(region, language) log.Debug("repo.GetNode: " + repoNode.Id) for _, childId := range repoNode.Index { childNode := repoNode.Nodes[childId] - if (level == 0 || expanded || !expanded && childNode.InPath(path)) && !childNode.Hidden && childNode.IsOneOfTheseMimeTypes(mimeTypes) && childNode.InRegion(region) { - node.Nodes[childId] = repo.GetNode(childNode, expanded, mimeTypes, path, level+1, region, language) + if (level == 0 || expanded || !expanded && childNode.InPath(path)) && !childNode.Hidden && childNode.CanBeAccessedByGroups(groups) && childNode.IsOneOfTheseMimeTypes(mimeTypes) && childNode.InRegion(region) { + node.Nodes[childId] = repo.GetNode(childNode, expanded, mimeTypes, path, level+1, groups, region, language) node.Index = append(node.Index, childId) - } else { - fmt.Println("no see for", childNode.GetName(language), childNode.Hidden) } + // fmt.Println("no see for", childNode.GetName(region, language), childNode.Hidden) + } return node } @@ -115,7 +115,7 @@ func (repo *Repo) GetNodes(r *requests.Nodes) map[string]*content.Node { for nodeName, nodeRequest := range r.Nodes { log.Debug(" adding node " + nodeName + " " + nodeRequest.Id) if treeNode, ok := repo.Directory[nodeRequest.Id]; ok { - nodes[nodeName] = repo.GetNode(treeNode, nodeRequest.Expand, nodeRequest.MimeTypes, path, 0, r.Env.Defaults.Region, r.Env.Defaults.Language) + nodes[nodeName] = repo.GetNode(treeNode, nodeRequest.Expand, nodeRequest.MimeTypes, path, 0, r.Env.Groups, r.Env.Defaults.Region, r.Env.Defaults.Language) } else { log.Warning("you are requesting an invalid tree node for " + nodeName + " : " + nodeRequest.Id) } @@ -147,7 +147,7 @@ func (repo *Repo) GetContent(r *requests.Content) *content.SiteContent { for treeName, treeRequest := range r.Nodes { log.Debug(" adding tree " + treeName + " " + treeRequest.Id) if treeNode, ok := repo.Directory[treeRequest.Id]; ok { - c.Nodes[treeName] = repo.GetNode(treeNode, treeRequest.Expand, treeRequest.MimeTypes, c.Path, 0, region, language) + c.Nodes[treeName] = repo.GetNode(treeNode, treeRequest.Expand, treeRequest.MimeTypes, c.Path, 0, r.Env.Groups, region, language) } else { log.Warning("you are requesting an invalid tree node for " + treeName + " : " + treeRequest.Id) }