Browse Source

Module selection

Vova Tkach 6 years ago
parent
commit
49f853f51b
2 changed files with 42 additions and 20 deletions
  1. 1 1
      engine/wrapper/wrapper.go
  2. 41 19
      modules/modules.go

+ 1 - 1
engine/wrapper/wrapper.go

@@ -52,7 +52,7 @@ func New(l *logger.Logger, w http.ResponseWriter, r *http.Request, s *session.Se
 		DTemplate:  dirTemplate,
 		DTemplate:  dirTemplate,
 		DTmp:       dirTmp,
 		DTmp:       dirTmp,
 		UrlArgs:    []string{},
 		UrlArgs:    []string{},
-		CurrModule: "index",
+		CurrModule: "",
 	}
 	}
 }
 }
 
 

+ 41 - 19
modules/modules.go

@@ -81,6 +81,29 @@ func (this *Modules) newAction(WantDB bool, Mount string, af func(wrap *wrapper.
 	}
 	}
 }
 }
 
 
+func (this *Modules) getCurrentModule(wrap *wrapper.Wrapper) (*Module, string) {
+	var mod *Module = nil
+	var modCurr string = ""
+
+	// Some module
+	if len(wrap.UrlArgs) > 0 {
+		if m, ok := this.mods[wrap.UrlArgs[0]]; ok {
+			mod = m
+			modCurr = wrap.UrlArgs[0]
+		}
+	}
+
+	// Default module
+	if mod == nil {
+		if m, ok := this.mods["index"]; ok {
+			mod = m
+			modCurr = "index"
+		}
+	}
+
+	return mod, modCurr
+}
+
 func New() *Modules {
 func New() *Modules {
 	m := Modules{
 	m := Modules{
 		mods: map[string]*Module{},
 		mods: map[string]*Module{},
@@ -120,24 +143,9 @@ func (this *Modules) XXXActionFire(wrap *wrapper.Wrapper) bool {
 }
 }
 
 
 func (this *Modules) XXXFrontEnd(wrap *wrapper.Wrapper) bool {
 func (this *Modules) XXXFrontEnd(wrap *wrapper.Wrapper) bool {
-	var mod *Module = nil
-
-	// Some module
-	if len(wrap.UrlArgs) > 0 {
-		if m, ok := this.mods[wrap.UrlArgs[0]]; ok {
-			mod = m
-		}
-	}
-
-	// Default module
-	if mod == nil {
-		if m, ok := this.mods["index"]; ok {
-			mod = m
-		}
-	}
-
-	// Check and run
+	mod, cm := this.getCurrentModule(wrap)
 	if mod != nil {
 	if mod != nil {
+		wrap.CurrModule = cm
 		if mod.FrontEnd != nil {
 		if mod.FrontEnd != nil {
 			if mod.WantDB {
 			if mod.WantDB {
 				err := wrap.UseDatabase()
 				err := wrap.UseDatabase()
@@ -151,11 +159,25 @@ func (this *Modules) XXXFrontEnd(wrap *wrapper.Wrapper) bool {
 			return true
 			return true
 		}
 		}
 	}
 	}
-
 	return false
 	return false
 }
 }
 
 
 func (this *Modules) XXXBackEnd(wrap *wrapper.Wrapper) bool {
 func (this *Modules) XXXBackEnd(wrap *wrapper.Wrapper) bool {
-	//fmt.Printf("Back: %v\n", wrap.UrlArgs)
+	mod, cm := this.getCurrentModule(wrap)
+	if mod != nil {
+		wrap.CurrModule = cm
+		if mod.BackEnd != nil {
+			if mod.WantDB {
+				err := wrap.UseDatabase()
+				if err != nil {
+					utils.SystemErrorPageEngine(wrap.W, err)
+					return true
+				}
+				defer wrap.DB.Close()
+			}
+			mod.BackEnd(wrap)
+			return true
+		}
+	}
 	return false
 	return false
 }
 }