| 
					
				 | 
			
			
				@@ -3,12 +3,10 @@ package api 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"encoding/json" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"fmt" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	"html/template" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"io/ioutil" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"net/http" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"github.com/gorilla/mux" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	"github.com/gorilla/schema" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"gogs.carducci-dante.gov.it/karmen/core/orm" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"gogs.carducci-dante.gov.it/karmen/core/renderer" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"gogs.carducci-dante.gov.it/karmen/datasource/edt" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -40,7 +38,7 @@ func teachersHandler() http.Handler { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func teacherShowHandler() http.Handler { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	fn := func(w http.ResponseWriter, r *http.Request) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		teacher, err := orm.GetTeacher(mux.Vars(r)["id"]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		teacher, err := orm.GetTeacherAll(mux.Vars(r)["id"]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			renderer.Render[r.URL.Query()["format"][0]](w, r, err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} else { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -53,37 +51,23 @@ func teacherShowHandler() http.Handler { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func teachersAddHandler() http.Handler { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	fn := func(w http.ResponseWriter, r *http.Request) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if r.Method == "GET" { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			var data struct { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				Update    bool 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				SubmitUrl template.URL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			teacher, err := orm.GetTeacher(mux.Vars(r)["id"]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				renderer.Render[r.URL.Query()["format"][0]](w, r, err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				renderer.Render[r.URL.Query()["format"][0]](w, r, teacher, r.URL.Query()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			data.SubmitUrl = template.URL(fmt.Sprintf("/teachers/add")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// if err := renderer.Render(w, "base", "teachers_add_update", data); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// 	panic(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} else if r.Method == "POST" { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			var teacher orm.Teacher 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if err := r.ParseForm(); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				panic(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			decoder := schema.NewDecoder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if err := decoder.Decode(&teacher, r.PostForm); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			teacher := new(orm.Teacher) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			err := renderer.Decode(teacher, r) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				panic(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// Generate username and initial password 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			teacher.Username = teacher.GenerateUsername() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			teacher.Password = teacher.GenerateSaltedPassword(teacher.Username) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			orm.DB().NewRecord(teacher) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if err := orm.DB().Create(&teacher).Error; err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			_, err = orm.SaveTeacher(teacher) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				panic(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			http.Redirect(w, r, fmt.Sprintf("/teachers/%d", teacher.ID), http.StatusSeeOther) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			http.Redirect(w, r, fmt.Sprintf("/teachers/%d?format=html&tpl_layout=base&tpl_content=teachers_show", teacher.ID), http.StatusSeeOther) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -127,14 +111,15 @@ func teacherUpdateHandler() http.Handler { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				panic(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			newTeacher, err := renderer.Decode(&orm.Teacher{}, r) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			err = renderer.Decode(teacher, r) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				panic(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			_, err = SaveTeacher(mux.Vars(r)["id"], newTeacher.(*orm.Teacher)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			_, err = orm.SaveTeacher(teacher) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				panic(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			http.Redirect(w, r, fmt.Sprintf("/teachers/%d?format=html&tpl_layout=base&tpl_content=teachers_show", teacher.ID), http.StatusSeeOther) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 |