Ver código fonte

Work in progress

Andrea Fazzi 6 anos atrás
pai
commit
e328b38056
7 arquivos alterados com 33 adições e 437 exclusões
  1. 0 32
      handlers/activities.go
  2. 0 16
      handlers/dashboard.go
  3. 4 35
      handlers/teachers.go
  4. 0 7
      main.go
  5. 0 156
      orm/activity.go
  6. 21 191
      orm/teacher.go
  7. 8 0
      renderer/renderer.go

+ 0 - 32
handlers/activities.go

@@ -119,38 +119,6 @@ func activitiesDeleteHandler() http.Handler {
 			RedirectUrl string `json:"redirect_url"`
 			RedirectUrl string `json:"redirect_url"`
 		}
 		}
 
 
-		// Handle associations
-
-		if activity.TeacherID != 0 {
-			var (
-				class   orm.Class
-				subject orm.Class
-				teacher orm.Teacher
-			)
-			if err := orm.DB().First(&teacher, activity.TeacherID).Error; err != nil {
-				panic(err)
-			}
-
-			teacher.CalcHours(orm.DB())
-			orm.DB().Save(&teacher)
-
-			if err := orm.DB().First(&class, activity.ClassID).Error; err != nil {
-				panic(err)
-			}
-
-			if err := orm.DB().First(&subject, activity.SubjectID).Error; err != nil {
-				panic(err)
-			}
-
-			if err := orm.DB().Model(&teacher).Association("Classes").Delete(class).Error; err != nil {
-				panic(err)
-			}
-
-			if err := orm.DB().Model(&teacher).Association("Subjects").Delete(subject).Error; err != nil {
-				panic(err)
-			}
-		}
-
 		data.RedirectUrl = "/activities"
 		data.RedirectUrl = "/activities"
 
 
 		w.Header().Set("Content-Type", "application/json")
 		w.Header().Set("Content-Type", "application/json")

+ 0 - 16
handlers/dashboard.go

@@ -1,8 +1,6 @@
 package api
 package api
 
 
 import (
 import (
-	"fmt"
-	"log"
 	"net/http"
 	"net/http"
 
 
 	"gogs.carducci-dante.gov.it/karmen/core/orm"
 	"gogs.carducci-dante.gov.it/karmen/core/orm"
@@ -50,20 +48,6 @@ func dashboardHandler() http.Handler {
 		data.NumOfSubjects = len(subjects)
 		data.NumOfSubjects = len(subjects)
 		data.NumOfClasses = len(classes)
 		data.NumOfClasses = len(classes)
 
 
-		if r.URL.Query().Get("reload_issues") == "true" {
-
-			log.Println("Reloading issues...")
-
-			for _, teacher := range teachers {
-				teacher.CalcHours(orm.DB())
-				orm.DB().Where("teacher_id = ?", teacher.ID).Delete(&orm.Issue{})
-				teacher.CheckForIssues(orm.DB())
-			}
-			http.Redirect(w, r, fmt.Sprintf("/"), http.StatusSeeOther)
-		}
-		// if err := renderer.Render(w, "base", "dashboard", data); err != nil {
-		// 	panic(err)
-		// }
 	}
 	}
 	return http.HandlerFunc(fn)
 	return http.HandlerFunc(fn)
 }
 }

+ 4 - 35
handlers/teachers.go

@@ -5,7 +5,6 @@ import (
 	"fmt"
 	"fmt"
 	"html/template"
 	"html/template"
 	"io/ioutil"
 	"io/ioutil"
-	"log"
 	"net/http"
 	"net/http"
 
 
 	"github.com/gorilla/mux"
 	"github.com/gorilla/mux"
@@ -121,47 +120,17 @@ func teacherUpdateHandler() http.Handler {
 			if err != nil {
 			if err != nil {
 				renderer.Render[r.URL.Query()["format"][0]](w, r, err)
 				renderer.Render[r.URL.Query()["format"][0]](w, r, err)
 			} else {
 			} else {
-				log.Println(r.URL.Query())
 				renderer.Render[r.URL.Query()["format"][0]](w, r, teacher, r.URL.Query())
 				renderer.Render[r.URL.Query()["format"][0]](w, r, teacher, r.URL.Query())
 			}
 			}
 		} else if r.Method == "POST" {
 		} else if r.Method == "POST" {
-			var (
-				teacher     orm.Teacher
-				oldPassword string
-			)
-			if err := orm.DB().First(&teacher, mux.Vars(r)["id"]).Error; err != nil {
-				panic(err)
-			}
-
-			oldPassword = teacher.Password
-
-			if err := r.ParseForm(); err != nil {
-				panic(err)
-			}
-
-			decoder := schema.NewDecoder()
-			if err := decoder.Decode(&teacher, r.PostForm); err != nil {
-				panic(err)
-			}
-
-			if oldPassword != teacher.Password {
-				teacher.Password = teacher.GenerateSaltedPassword(teacher.Password)
-			}
-
-			if err := orm.DB().Save(&teacher).Error; err != nil {
+			teacher, err := orm.GetTeacher(mux.Vars(r)["id"])
+			if err != nil {
 				panic(err)
 				panic(err)
 			}
 			}
-
-			var data struct {
-				Teachers []orm.Teacher
-			}
-
-			data.Teachers = make([]orm.Teacher, 0)
-			if err := orm.DB().Find(&data.Teachers).Error; err != nil {
+			_, err = teacher.Save(renderer.Decode(r).(*orm.Teacher))
+			if err != nil {
 				panic(err)
 				panic(err)
 			}
 			}
-
-			http.Redirect(w, r, fmt.Sprintf("/teachers/%d?format=html&tpl_layout=base&tpl_content=teachers_show", teacher.ID), http.StatusSeeOther)
 		}
 		}
 
 
 	}
 	}

+ 0 - 7
main.go

@@ -92,13 +92,6 @@ func main() {
 		}
 		}
 	}
 	}
 
 
-	// rend, err := renderer.NewHTMLRenderer("templates/")
-	// if err != nil {
-	// 	panic(err)
-	// }
-
-	// renderer.Use(rend)
-
 	log.Println("karmen is listening to port 3000...")
 	log.Println("karmen is listening to port 3000...")
 	if err := http.ListenAndServe(":3000", handlers.LoggingHandler(os.Stdout, api.Handlers())); err != nil {
 	if err := http.ListenAndServe(":3000", handlers.LoggingHandler(os.Stdout, api.Handlers())); err != nil {
 		panic(err)
 		panic(err)

+ 0 - 156
orm/activity.go

@@ -15,159 +15,3 @@ type Activity struct {
 
 
 	prevTeacherID uint
 	prevTeacherID uint
 }
 }
-
-func (a *Activity) updateRelatedTeacher(tx *gorm.DB, teacherID uint) {
-	var (
-		teacher Teacher
-		class   Class
-		subject Subject
-	)
-	if err := tx.Find(&teacher, teacherID).Error; err != nil {
-		panic(err)
-	}
-
-	// Calculate teacher hours
-
-	teacher.CalcHours(tx)
-
-	// Teacher -> Classes association
-
-	if err := tx.First(&class, a.ClassID).Error; err != nil {
-		panic(err)
-	}
-
-	if err := tx.Model(&teacher).Association("Classes").Append(class).Error; err != nil {
-		panic(err)
-	}
-
-	// Teacher -> Subjects association
-
-	if err := tx.First(&subject, a.SubjectID).Error; err != nil {
-		panic(err)
-	}
-
-	if err := tx.Model(&teacher).Association("Subjects").Append(subject).Error; err != nil {
-		panic(err)
-	}
-
-}
-
-func (a *Activity) deleteRelatedTeacherAssociations(tx *gorm.DB, teacherID uint) {
-	var (
-		teacher Teacher
-		class   Class
-		subject Subject
-	)
-	if err := tx.Find(&teacher, teacherID).Error; err != nil {
-		panic(err)
-	}
-
-	// Calculate teacher hours
-
-	teacher.CalcHours(tx)
-
-	// Teacher -> Classes association
-
-	if err := tx.First(&class, a.ClassID).Error; err != nil {
-		panic(err)
-	}
-
-	if err := tx.Preload("Classes").Find(&teacher, teacher.ID).Error; err != nil {
-		panic(err)
-	}
-
-	if err := tx.Model(&teacher).Association("Classes").Delete(class).Error; err != nil {
-		panic(err)
-	}
-
-	if err := tx.Preload("Classes").Find(&teacher, teacher.ID).Error; err != nil {
-		panic(err)
-	}
-
-	// Teacher -> Subjects association
-
-	if err := tx.First(&subject, a.SubjectID).Error; err != nil {
-		panic(err)
-	}
-
-	if err := tx.Model(&teacher).Association("Subjects").Delete(subject).Error; err != nil {
-		panic(err)
-	}
-
-}
-
-func (a *Activity) createUpdateActivity(tx *gorm.DB) {
-	if (a.TeacherID != a.prevTeacherID) && (a.prevTeacherID != 0) {
-		a.deleteRelatedTeacherAssociations(tx, a.prevTeacherID)
-	}
-	if a.TeacherID != 0 {
-		a.updateRelatedTeacher(tx, a.TeacherID)
-	}
-}
-
-func (a *Activity) deleteActivity(tx *gorm.DB) {
-	if a.TeacherID != 0 {
-		var (
-			teacher Teacher
-			class   Class
-			subject Subject
-		)
-		if err := tx.Find(&teacher, a.TeacherID).Error; err != nil {
-			panic(err)
-		}
-
-		// Calculate teacher hours
-
-		teacher.CalcHours(tx)
-
-		// Teacher -> Classes association
-
-		if err := tx.First(&class, a.ClassID).Error; err != nil {
-			panic(err)
-		}
-
-		if err := tx.Model(&teacher).Association("Classes").Delete(class).Error; err != nil {
-			panic(err)
-		}
-
-		// Teacher -> Subjects association
-
-		if err := tx.First(&subject, a.SubjectID).Error; err != nil {
-			panic(err)
-		}
-
-		if err := tx.Model(&teacher).Association("Subjects").Delete(subject).Error; err != nil {
-			panic(err)
-		}
-	}
-
-}
-
-func (a *Activity) AfterCreate(tx *gorm.DB) error {
-	a.createUpdateActivity(tx)
-	return nil
-}
-
-func (a *Activity) BeforeUpdate(tx *gorm.DB) error {
-	var currActivity Activity
-	if err := tx.First(&currActivity, a.ID).Error; err != nil {
-		panic(err)
-	}
-	a.prevTeacherID = currActivity.TeacherID
-	return nil
-}
-
-func (a *Activity) AfterSave(tx *gorm.DB) error {
-	a.createUpdateActivity(tx)
-	return nil
-}
-
-// func (a *Activity) AfterUpdate(tx *gorm.DB) error {
-// 	a.createUpdateActivity(tx)
-// 	return nil
-// }
-
-func (a *Activity) AfterDelete(tx *gorm.DB) error {
-	a.deleteActivity(tx)
-	return nil
-}

+ 21 - 191
orm/teacher.go

@@ -2,10 +2,8 @@ package orm
 
 
 import (
 import (
 	"errors"
 	"errors"
-	"fmt"
 
 
 	"github.com/jinzhu/gorm"
 	"github.com/jinzhu/gorm"
-	"gogs.carducci-dante.gov.it/karmen/config"
 )
 )
 
 
 type Teacher struct {
 type Teacher struct {
@@ -81,6 +79,13 @@ func GetTeachersAll() ([]*Teacher, error) {
 	return teachers, nil
 	return teachers, nil
 }
 }
 
 
+func (t *Teacher) Save(teacher *Teacher) (*Teacher, error) {
+	if err := DB().Save(teacher).Error; err != nil {
+		return nil, err
+	}
+	return t, nil
+}
+
 func (t *Teacher) GetClasses() ([]*Class, error) {
 func (t *Teacher) GetClasses() ([]*Class, error) {
 	if err := DB().Raw(selectUniqueTeacherClasses, t.ID).Scan(&t.Classes).Error; err != nil {
 	if err := DB().Raw(selectUniqueTeacherClasses, t.ID).Scan(&t.Classes).Error; err != nil {
 		return nil, err
 		return nil, err
@@ -100,7 +105,6 @@ func (t *Teacher) GetActivitiesByClass(id string) ([]*Activity, error) {
 		return nil, err
 		return nil, err
 	}
 	}
 	return t.Activities, nil
 	return t.Activities, nil
-
 }
 }
 
 
 func (t *Teacher) Create(db *gorm.DB, record map[string]interface{}) error {
 func (t *Teacher) Create(db *gorm.DB, record map[string]interface{}) error {
@@ -122,80 +126,27 @@ func (t *Teacher) Create(db *gorm.DB, record map[string]interface{}) error {
 	return nil
 	return nil
 }
 }
 
 
-func (t *Teacher) CalcHours(tx *gorm.DB) {
+func (t Teacher) IsCoordinator() []Class {
 	var (
 	var (
-		activities []Activity
-		sum        int
+		classes []Class
+		output  []Class
 	)
 	)
 
 
-	if err := tx.Model(t).Related(&activities).Error; err != nil {
-		panic(err)
-	}
-
-	for _, a := range activities {
-		sum += a.Hours
-	}
-
-	if err := tx.Model(t).Update("curr_hours", sum).Error; err != nil {
-		panic(err)
-	}
-}
-
-func (t Teacher) GetSubjectsByClassID(classID uint) []Subject {
-	var (
-		activities []Activity
-		subjects   []Subject
-	)
-
-	if err := DB().Model(t).Preload("Subject").Related(&activities).Error; err != nil {
+	if err := DB().Model(t).Related(&classes, "Classes").Error; err != nil {
 		panic(err)
 		panic(err)
 	}
 	}
 
 
-	for _, a := range activities {
-		if a.ClassID == classID {
-			subjects = append(subjects, a.Subject)
-		}
-	}
-
-	return subjects
-}
-
-func (t *Teacher) IsCoordinator() ([]*Class, error) {
-	var output []*Class
-
-	classes, err := t.GetClasses()
-	if err != nil {
-		return nil, err
-	}
-
 	for _, class := range classes {
 	for _, class := range classes {
 		if class.CoordinatorID == t.ID {
 		if class.CoordinatorID == t.ID {
 			output = append(output, class)
 			output = append(output, class)
 		}
 		}
 	}
 	}
 
 
-	return output, nil
-
-}
-
-func (t *Teacher) IsMinuter() ([]*Class, error) {
-	var output []*Class
-
-	classes, err := t.GetClasses()
-	if err != nil {
-		return nil, err
-	}
-
-	for _, class := range classes {
-		if class.MinuterID == t.ID {
-			output = append(output, class)
-		}
-	}
+	return output
 
 
-	return output, nil
 }
 }
 
 
-func (t *Teacher) IsCoordinatorInClass(className string) bool {
+func (t Teacher) IsCoordinatorInClass(className string) bool {
 	var classes []Class
 	var classes []Class
 
 
 	if err := DB().Model(t).Where("name = ?", className).Related(&classes, "Classes").Error; err != nil {
 	if err := DB().Model(t).Where("name = ?", className).Related(&classes, "Classes").Error; err != nil {
@@ -212,143 +163,22 @@ func (t *Teacher) IsCoordinatorInClass(className string) bool {
 
 
 }
 }
 
 
-func (t Teacher) HasClass(name string) bool {
-	var classes []Class
+func (t Teacher) IsMinuter() []Class {
+	var (
+		classes []Class
+		output  []Class
+	)
 
 
 	if err := DB().Model(t).Related(&classes, "Classes").Error; err != nil {
 	if err := DB().Model(t).Related(&classes, "Classes").Error; err != nil {
 		panic(err)
 		panic(err)
 	}
 	}
 
 
 	for _, class := range classes {
 	for _, class := range classes {
-		if class.Name == name {
-			return true
-		}
-	}
-
-	return false
-
-}
-
-func (t Teacher) HasSubject(name string) bool {
-	var subjects []Subject
-
-	if err := DB().Model(t).Related(&subjects, "Subjects").Error; err != nil {
-		panic(err)
-	}
-
-	for _, subject := range subjects {
-		if subject.Name == name {
-			return true
-		}
-	}
-
-	return false
-
-}
-
-func (t Teacher) HasSubjectInClass(subjectName string, className string) bool {
-	var classes []Class
-
-	if err := DB().Where("name = ?", className).Find(&classes).Error; err != nil {
-		panic(err)
-	}
-
-	subjects := t.GetSubjectsByClassID(classes[0].ID)
-
-	for _, s := range subjects {
-		if s.Name == subjectName {
-			return true
+		if class.MinuterID == t.ID {
+			output = append(output, class)
 		}
 		}
 	}
 	}
 
 
-	return false
-}
-
-// func (t *Teacher) CheckForIssues(tx *gorm.DB) {
-// 	if t.CurrHours != t.Hours {
-// 		var issues []Issue
-// 		if err := tx.Where("type = ? and reported = ?", IssueTeacherHours, 1).Model(t).Related(&issues).Error; err != nil {
-// 			panic(err)
-// 		}
-// 		if len(issues) == 0 {
-// 			desc := fmt.Sprintf(
-// 				"Le ore relative alla cattedra del docente %s %s non coincidono con la somma delle ore delle sue attività (%d/%d)",
-// 				t.Surname, t.Name,
-// 				t.CurrHours, t.Hours)
-// 			issue := Issue{
-// 				Type:        IssueTeacherHours,
-// 				Description: desc,
-// 				Reported:    true,
-// 				TeacherID:   t.ID,
-// 			}
-// 			if err := tx.Save(&issue).Error; err != nil {
-// 				panic(err)
-// 			}
-// 		} else {
-// 			issues[0].Description = fmt.Sprintf(
-// 				"Le ore relative alla cattedra del docente %s %s non coincidono con la somma delle ore delle sue attività (%d/%d)",
-// 				t.Surname, t.Name,
-// 				t.CurrHours, t.Hours)
-// 			if err := tx.Save(&issues[0]).Error; err != nil {
-// 				panic(err)
-// 			}
-// 		}
-// 	} else {
-// 		var issues []Issue
-// 		if err := tx.Where("type = ? and reported = ?", IssueTeacherHours, 1).Model(t).Related(&issues).Error; err != nil {
-// 			panic(err)
-// 		}
-// 		if len(issues) > 0 {
-// 			if err := tx.Delete(&issues[0]).Error; err != nil {
-// 				panic(err)
-// 			}
-// 		}
-
-// 	}
-// }
-
-func (t *Teacher) generateCredential() error {
-	t.Username = t.GenerateUsername()
-	t.Password = t.GenerateSaltedPassword(t.Username)
-	t.Email = fmt.Sprintf("%s@%s", t.Username, config.Config.Domain)
-	return nil
-}
-
-func (t *Teacher) CheckForIssues(tx *gorm.DB) {
-	// issue := newTeacherMaxHoursIssue(t)
-	// if t.CurrHours != t.Hours {
-	// 	issue.createIfNotExist(t)
-	// } else {
-	// 	issue.resetIfExist(t)
-	// }
-}
-
-func (t *Teacher) BeforeCreate(tx *gorm.DB) error {
-	// FIXME: should re-generate only if related columns are modified
-	t.generateCredential()
-	return nil
-}
-
-func (t *Teacher) BeforeUpdate(tx *gorm.DB) error {
-	// FIXME: should re-generate only if related columns are modified
-	t.generateCredential()
-	return nil
-}
-
-// func (t *Teacher) AfterUpdate(tx *gorm.DB) error {
-// 	// FIXME: should re-generate only if related columns are modified
-// 	t.generateCredential()
-// 	// t.CheckForIssues(tx)
-// 	return nil
-// }
+	return output
 
 
-func (t *Teacher) AfterDelete(tx *gorm.DB) error {
-	var issues []Issue
-	if err := tx.Where("type = ?", IssueTeacherHours).Model(t).Related(&issues).Error; err != nil {
-		panic(err)
-	}
-	if err := tx.Delete(&issues).Error; err != nil {
-		panic(err)
-	}
-	return nil
 }
 }

+ 8 - 0
renderer/renderer.go

@@ -147,3 +147,11 @@ func (rend *HTMLRenderer) Render(w http.ResponseWriter, r *http.Request, data in
 		}
 		}
 	}
 	}
 }
 }
+
+func Decode(r *http.Request) interface{} {
+	switch r.Header.Get("Content-type") {
+	case "application/x-www-form-urlencoded":
+
+	}
+	return nil
+}