/** составить словарь для комбо, с именем и фамилией, все пользователи */ public void getAllWithCombo() { try { Table users = getTable(getModelName()); Table userProfile = getTable("userProfile"); Select select = getSelect(); select.selectDistinct(users.getPrimary()); select.select(users); select.select(userProfile.get("surname"), userProfile.get("name")); select.from(users); select.leftJoin(users.getPrimary(), userProfile.get("user_id")); // select.on(userProfile.get("delete_date").isNull()); select.order(userProfile.get("surname"), OrdTypes.ASC); select.executeSelect(getConnection()); select(select); setDictAliases("surname", "name"); setDictionary(); } catch (Exception ex) { addError(MyString.getStackExeption(ex)); if (project.index.message != null) { project.index.message += MyString.getStackExeption(ex); } setStatus(false); } }
/** составить словарь для комбо, с именем и фамилией, только активные пользователи */ public void getActiveWithCombo() { try { Table users = getTable(getModelName()); Table userProfile = getTable("userProfile"); Select select = getSelect(); select.selectDistinct(users.getPrimary()); select.select(users); select.select(userProfile.get("surname"), userProfile.get("name")); select.from(users, userProfile); select.and(users.get("user_id").eq(userProfile.get("user_id"))); select.and(userProfile.get("delete_date").isNull()); select.and(users.get("active_to").isNull()); select.order(userProfile.get("surname"), OrdTypes.ASC); select.executeSelect(getConnection()); select(select); setDictAliases("surname", "name"); setDictionary(); } catch (Exception ex) { addError(MyString.getStackExeption(ex)); setStatus(false); } }
// регистрация пользователя 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)); } }
@Override public void findActive() { try { // найти ссылки для активного пользователя Table userLink = getTable("user_link"); Table users = getTable("users"); Table userProfile = getTable("userProfile"); Select sel = getSelect(); sel.select(userLink, userProfile); sel.from(userLink, users, userProfile); sel.and(userLink.get("user_id").eq(getAuthorizedUserId())); sel.and(userLink.get("partner_id").eq(users.get("user_id"))); sel.and(users.get("user_id").eq(userProfile.get("user_id"))); sel.and(userLink.get("delete_date").isNull()); sel.and(users.get("active_to").isNull()); sel.and(userProfile.get("delete_date").isNull()); sel.executeSelect(getConnection()); select(sel); } catch (Exception e) { registerException(e); } }
/** * составить словарь для комбо, с именем и фамилией, только активные пользователи, и только те, * которые есть в списке у авторизованного */ public void getActiveWithComboOnlyGroup() { try { Table users = getTable(getModelName()); Table userProfile = getTable("userProfile"); Table userLink = getTable("user_link"); Select select = getSelect(); select.selectDistinct(users.getPrimary()); select.select(users); select.select(userProfile.get("surname"), userProfile.get("name")); select.from(users, userProfile, userLink); select.and(users.get("user_id").eq(userProfile.get("user_id"))); select.and(userProfile.get("delete_date").isNull()); select.and(users.get("active_to").isNull()); List<Condition> cnd = new ArrayList(); cnd.add(users.get("user_id").eq(getAuthorizedUserId())); List<Condition> cnd2 = new ArrayList(); cnd2.add(users.get("user_id").eq(userLink.get("partner_id"))); cnd2.add(userLink.get("user_id").eq(getAuthorizedUserId())); cnd2.add(userLink.get("delete_date").isNull()); select.andOrList(cnd, cnd2); select.order(userProfile.get("surname"), OrdTypes.ASC); select.executeSelect(getConnection()); select(select); setDictAliases("surname", "name"); setDictionary(); } catch (Exception ex) { addError(MyString.getStackExeption(ex)); if (project.index.message != null) { project.index.message += MyString.getStackExeption(ex); } setStatus(false); } }
/** * проверить, высылал ли авторизованный пользователь инвайт на этот адрес * * @param login * @return true - если ещё не высылал, false - если уже высылал */ private boolean checkInvite(String email) throws Exception { boolean ok = false; Table invite = getTable("invite"); Select sel = getSelect(); sel.select(invite); sel.from(invite); sel.and(invite.get("delete_date").isNull()); sel.and(invite.get("login").eq(email)); sel.and(invite.get("user_id").eq(getAuthorizedUserId())); if (sel.executeSelect(getConnection())) { if (sel.getDinamicList().isEmpty()) { ok = true; } else { setStatus(false); addError( "Вы уже отправили приглашение этому пользователю! Подождите, пока пользователь зарегистрируется в системе!"); } } else { setStatus(false); addError(sel.getError()); } return ok; }
/** добавить пользователя в группу. Подается параметр - логин пользователя */ @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); } }