// регистрация пользователя public boolean registrationWithPassword() throws Exception { boolean status = false; // проверить наличие такого логина ArrayList<String> errors = new ArrayList<String>(); if (MyString.NotNull(getReq("login"))) { if (MyString.NotNull(getReq("password")) && MyString.NotNull(getReq("password2"))) { if (getReq("password").equals(getReq("password2"))) { String password = getReq("password").toString(); String login = (String) getReq("login"); Table users = getTable("users"); Select se = getSelect(); se.select(users); se.from(users); se.and(users.get("login").eq(login)); se.and(users.get("active_to").isNull()); se.executeSelect(getConnection()); if (se.getDinamicList().size() > 0) { errors.add("Пользователь с таким адресом электронной почты уже существует"); } else { String hash = Security.getPasswordHash(password); Model userModel = getModel(getModelName()); userModel.set("password", hash); userModel.set("login", login); userModel.set("active_from", FormatDate.getCurrentDateInMysql()); status = userModel.save(); if (status) { set("user_id", userModel.get("user_id")); } else { errors.addAll(userModel.getError()); } } } else { addError("Ошибка: пароль не совпадает с подтверждением"); } } else { setStatus(false); addError("не передан пароль"); } } else { setStatus(false); addError("не передан адрес электронной почты"); } addError(errors); setStatus(status); return status; }
@Override public void updateModel() { try { if (MyString.NotNull(getReq("login"), getReq("user_id"))) { // проверить, есть ли уже такой логин Table usersTable = getTable("users"); Select sel = getSelect(); sel.select(usersTable.get("user_id"), "count", AgrTypes.COUNT); sel.from(usersTable); sel.and(usersTable.get("login").isLikeLower(getReq("login"))); sel.and(usersTable.get("login").eq((getReq("login")))); sel.and(usersTable.get("user_id").notEq(getReq("user_id"))); sel.and(usersTable.get("active_to").isNull()); boolean ok = sel.executeSelect(getConnection()); if (ok) { int count = 0; if (!sel.getDinamicList().isEmpty()) { DinamicModel model = sel.getDinamicList().get(0); try { count = Integer.parseInt(model.get("count").toString()); } catch (Exception e) { } } if (count == 0) { super.updateModel(); } else { setStatus(false); addError("логин " + getReq("login") + " уже существует у другого пользователя"); } } else { setStatus(false); addError(sel.getError()); } } else { setStatus(false); addError("не все параметры переданы"); } } catch (Exception e) { setStatus(false); addError(MyString.getStackExeption(e)); } }
/** сбросить пароль на случайное значение */ public void resetPassword() { try { if (MyString.NotNull(getReq("user_id"))) { Model users = getModel(); users.set("user_id", getReq("user_id")); set("user_profile_id", getReq("user_profile_id")); if (users.findByPrimary()) { String password = "******"; users.set("password", Security.getPasswordHash(password)); users.save(); set("password", password); model(users); } else { addError(users.getError()); } } else { addError("не определен пользователь"); } } catch (Exception e) { registerException(e); } }
/** добавить пользователя в группу. Подается параметр - логин пользователя */ @Override public void saveModel() { try { if (MyString.NotNull(getReq("byUser"))) { saveByUserId(); } else { if (MyString.NotNull(getReq("login"))) { String login = getReq("login").toString().trim(); Table userLink = getTable("user_link"); Table users = getTable("users"); // найти пользователя с таким логином Select userSelect = getSelect(); userSelect.select(users); userSelect.from(users); userSelect.and(users.get("active_to").isNull()); userSelect.and(users.get("login").eq(login)); boolean ok = userSelect.executeSelect(getConnection()); if (!ok) { setStatus(false); addError(userSelect.getError()); return; } // если есть такой пользователь if (!userSelect.getDinamicList().isEmpty()) { DinamicModel model = userSelect.getDinamicList().get(0); Object userId = model.get("user_id"); // проверить, нет ли попытки добавить самого себя int userIdInt = Integer.parseInt(userId.toString()); if (userIdInt != getAuthorizedUserId()) { // найти этого пользователя в группе у авторизованного Select linkSelect = getSelect(); linkSelect.select(userLink); linkSelect.from(userLink); linkSelect.and(userLink.get("delete_date").isNull()); linkSelect.and(userLink.get("user_id").eq(getAuthorizedUserId())); linkSelect.and(userLink.get("partner_id").eq(userId)); ok = linkSelect.executeSelect(getConnection()); if (!ok) { setStatus(false); addError(linkSelect.getError()); return; } // если его там нет if (linkSelect.getDinamicList().isEmpty()) { // сохранить setReq("user_id", getAuthorizedUserId()); setReq("partner_id", userId); super.saveModel(); return; } else { // вывести ошибку setStatus(false); addError("Этот пользователь уже есть в вашей группе"); } } else { setStatus(false); addError("Нельзя добавить в группу самого себя"); } } else { // проверить правильность электронного адреса // если адрес правильный if (checkEmail(login)) { // проверка - высылался ли уже инвайт этому пользователю if (checkInvite(login) && getStatus() == true) { // отправить инвайт sendInvite(login); if (getStatus() == true) { // сохранить инвайт saveInvite(login); if (getStatus()) { addMessage( "Этому пользователю было выслано приглашение на электронную почту. Когда пользователь зарегистрируется в системе, он будет добален в Вашу группу!"); } } } } else { setStatus(false); addError("ошибка: введен некорректный адрес электронной почты!"); } } } else { setStatus(false); addError("Введите логин"); } } } catch (Exception e) { registerException(e); } }
/** * сохранить связь между пользователями по инвайту. Применяется, когда регистрируется новый * пользователь, и этот пользователь был приглашен другим пользователем. Тогда мы регистрируем * связи между этими двумя пользователями - приглашенным и тем, кто пригласил. */ public void saveFromInvite() { try { if (MyString.NotNull(getReq("user_id")) && MyString.NotNull(getReq("login"))) { // получить ИД добавленного пользователя // получить логин Object login = getReq("login"); Object guestId = getReq("user_id"); // найти в таблице все записи с таким логином Table inviteTable = getTable("invite"); Select sel = getSelect(); sel.select(inviteTable); sel.from(inviteTable); sel.and(inviteTable.get("delete_date").isNull()); sel.and(inviteTable.get("login").eq(login)); boolean ok = sel.executeSelect(getConnection()); if (!ok) { setStatus(false); addError(sel.getError()); } // для каждой записи for (DinamicModel model : sel.getDinamicList()) { Object hostId = model.get("user_id"); if (hostId != null) { // сохранить две связи Model link1 = getModel(); link1.set("user_id", hostId); link1.set("partner_id", guestId); setStandartFields(link1, true); ok = link1.save(); if (!ok) { setStatus(false); addError("3"); addError(link1.getError()); } // сохранить две связи Model link2 = getModel(); link2.set("user_id", guestId); link2.set("partner_id", hostId); setStandartFields(link2, true); ok = link2.save(); if (!ok) { setStatus(false); addError("2"); addError(link2.getError()); } // закрыть саму запись Model invite = getModel("invite"); invite.set("invite_id", model.get("invite_id")); setStandartFields(invite, false); invite.set("delete_date", FormatDate.getCurrentDateInMysql()); ok = invite.save(); if (!ok) { setStatus(false); addError("1"); addError(invite.getError()); } } } } else { setStatus(false); addError("не переданы ИД пользователя или логин"); } } catch (Exception e) { registerException(e); } }