func (this *PersonsModel) Add(userId int, params map[string]interface{}) error { var to, address string token := utils.GetRandSeq(HASH_SIZE) params["token"] = token log.Println("face_id: ", params["face_id"]) log.Println("group_id: ", params["group_id"]) log.Println("status: ", params["status"]) if db.IsExists("persons", []string{"face_id", "group_id"}, []interface{}{params["face_id"], params["group_id"]}) { return errors.New("Участник уже состоит в группе") } query := `SELECT param_values.value FROM param_values INNER JOIN registrations ON registrations.id = param_values.reg_id INNER JOIN params ON params.id = param_values.param_id INNER JOIN events ON events.id = registrations.event_id INNER JOIN faces ON faces.id = registrations.face_id INNER JOIN users ON users.id = faces.user_id WHERE params.id in (5, 6, 7) AND users.id = $1 AND events.id = 1 ORDER BY params.id;` data := db.Query(query, []interface{}{userId}) headName := "" if len(data) < 3 { return errors.New("Данные о руководителе группы отсутсвуют") } else { headName = data[0].(map[string]interface{})["value"].(string) headName += " " + data[1].(map[string]interface{})["value"].(string) headName += " " + data[2].(map[string]interface{})["value"].(string) } groupId, err := strconv.Atoi(params["group_id"].(string)) if err != nil { return err } var groupName string db.QueryRow("SELECT name FROM groups WHERE id = $1;", []interface{}{groupId}).Scan(&groupName) query = `SELECT param_values.value FROM param_values INNER JOIN registrations ON registrations.id = param_values.reg_id INNER JOIN params ON params.id = param_values.param_id INNER JOIN events ON events.id = registrations.event_id INNER JOIN faces ON faces.id = registrations.face_id INNER JOIN users ON users.id = faces.user_id WHERE params.id in (4, 5, 6, 7) AND faces.id = $1 AND events.id = 1 ORDER BY params.id;` data = db.Query(query, []interface{}{params["face_id"]}) if len(data) < 4 { return errors.New("Данные о приглашаемом участнике отсутсвуют.") } else { address = data[0].(map[string]interface{})["value"].(string) to = data[1].(map[string]interface{})["value"].(string) to += " " + data[2].(map[string]interface{})["value"].(string) to += " " + data[3].(map[string]interface{})["value"].(string) } if !mailer.InviteToGroup(to, address, token, headName, groupName) { return errors.New("Участник скорее всего указал неправильный email, отправить письмо-приглашенине невозможно") } this.LoadModelData(params).QueryInsert("").Scan() return nil }
func (this *GroupController) AddPerson() { userId, err := this.CheckSid() if err != nil { utils.SendJSReply(map[string]interface{}{"result": "Unauthorized"}, this.Response) return } request, err := utils.ParseJS(this.Request, this.Response) if err != nil { utils.SendJSReply(map[string]interface{}{"result": err.Error()}, this.Response) return } groupId, err := strconv.Atoi(request["group_id"].(string)) if err != nil { utils.SendJSReply(map[string]interface{}{"result": err.Error()}, this.Response) return } var groupName string db.QueryRow("SELECT name FROM groups WHERE id = $1;", []interface{}{groupId}).Scan(&groupName) date := time.Now().Format("2006-01-02T15:04:05Z00:00") token := utils.GetRandSeq(HASH_SIZE) to, address, headName := "", "", "" query := `SELECT param_values.value FROM param_values INNER JOIN registrations ON registrations.id = param_values.reg_id INNER JOIN params ON params.id = param_values.param_id INNER JOIN events ON events.id = registrations.event_id INNER JOIN faces ON faces.id = registrations.face_id INNER JOIN users ON users.id = faces.user_id WHERE params.id in (5, 6, 7) AND users.id = $1 AND events.id = 1 ORDER BY params.id;` data := db.Query(query, []interface{}{userId}) if len(data) < 3 { utils.SendJSReply(map[string]interface{}{"result": "Данные о руководителе группы отсутсвуют"}, this.Response) return } else { headName = data[0].(map[string]interface{})["value"].(string) headName += " " + data[1].(map[string]interface{})["value"].(string) headName += " " + data[2].(map[string]interface{})["value"].(string) } var faceId int this.GetModel("faces").QueryInsert("RETURNING id").Scan(&faceId) this.GetModel("persons"). LoadModelData(map[string]interface{}{"face_id": faceId, "group_id": groupId, "status": false, "token": token}). QueryInsert(""). Scan() var regId int this.GetModel("registrations"). LoadModelData(map[string]interface{}{"face_id": faceId, "event_id": 1, "status": false}). QueryInsert("RETURNING id"). Scan(®Id) var paramValueIds []string for _, element := range request["data"].([]interface{}) { paramId, err := strconv.Atoi(element.(map[string]interface{})["id"].(string)) if err != nil { log.Println(err.Error()) continue } query := `SELECT params.name FROM params WHERE params.id = $1;` res := db.Query(query, []interface{}{paramId}) name := res[0].(map[string]interface{})["name"].(string) value := element.(map[string]interface{})["value"].(string) if utils.MatchRegexp("^[ \t\v\r\n\f]{0,}$", value) { db.QueryDeleteByIds("param_vals", strings.Join(paramValueIds, ", ")) db.QueryDeleteByIds("registrations", strconv.Itoa(regId)) db.QueryDeleteByIds("faces", strconv.Itoa(faceId)) utils.SendJSReply(map[string]interface{}{"result": "Заполните параметр '" + name + "'."}, this.Response) return } var paramValId int paramValues := this.GetModel("param_values") err = paramValues.LoadModelData(map[string]interface{}{ "param_id": paramId, "value": value, "date": date, "user_id": userId, "reg_id": regId}). QueryInsert("RETURNING id"). Scan(¶mValId) if err, ok := err.(*pq.Error); ok { log.Println(err.Code.Name()) } paramValueIds = append(paramValueIds, strconv.Itoa(paramValId)) if paramId == 4 { address = value } else if paramId == 5 || paramId == 6 || paramId == 7 { to += value + " " } } if !mailer.InviteToGroup(to, address, token, headName, groupName) { utils.SendJSReply( map[string]interface{}{ "result": "Вы указали неправильный email, отправить письмо-приглашенине невозможно"}, this.Response) return } utils.SendJSReply(map[string]interface{}{"result": "ok"}, this.Response) }