groups support in GetNode, regionLanguageNames

This commit is contained in:
Jan Halfar 2013-11-26 18:03:34 +01:00
parent b03da8b9c6
commit bffcb11cf9
2 changed files with 27 additions and 11 deletions

View File

@ -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)

View File

@ -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)
}