/* * Aipo is a groupware program developed by TOWN, Inc. * Copyright (C) 2004-2015 TOWN, Inc. * http://www.aipo.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.aimluck.eip.user.util; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.jetspeed.services.logging.JetspeedLogFactoryService; import org.apache.jetspeed.services.logging.JetspeedLogger; import org.apache.turbine.util.RunData; import com.aimluck.eip.cayenne.om.security.TurbineUser; import com.aimluck.eip.common.ALEipGroup; import com.aimluck.eip.common.ALEipManager; import com.aimluck.eip.common.ALEipPost; import com.aimluck.eip.orm.Database; import com.aimluck.eip.orm.query.SQLTemplate; import com.aimluck.eip.user.beans.UserEmailLiteBean; import com.aimluck.eip.user.beans.UserGroupLiteBean; import com.aimluck.eip.user.beans.UserLiteBean; import com.aimluck.eip.user.beans.UserPhotoLiteBean; import com.aimluck.eip.util.ALEipUtils; /** * ユーザーのユーティリティクラスです。 <br /> * */ public class UserUtils { /** logger */ private static final JetspeedLogger logger = JetspeedLogFactoryService .getLogger(UserUtils.class.getName()); /** * * @param rundata * @return */ public static synchronized List<UserLiteBean> getUserLiteBeansFromGroup( RunData rundata, String groupname, boolean includeLoginuser) { int login_user_id = null != rundata ? ALEipUtils.getUserId(rundata) : 0; /** SQLを構築してデータベース検索 */ ArrayList<UserLiteBean> list = new ArrayList<UserLiteBean>(); StringBuffer statement = new StringBuffer(); statement.append("SELECT DISTINCT "); statement .append(" B.USER_ID, B.LOGIN_NAME, B.FIRST_NAME, B.LAST_NAME, D.POSITION "); statement.append("FROM turbine_user_group_role as A "); statement.append("LEFT JOIN turbine_user as B "); statement.append(" on A.USER_ID = B.USER_ID "); statement.append("LEFT JOIN turbine_group as C "); statement.append(" on A.GROUP_ID = C.GROUP_ID "); statement.append("LEFT JOIN eip_m_user_position as D "); statement.append(" on A.USER_ID = D.USER_ID "); statement.append("WHERE B.USER_ID > 3 AND B.DISABLED = 'F'"); statement.append(" AND C.GROUP_NAME = #bind($groupname) "); statement.append("ORDER BY D.POSITION"); String query = statement.toString(); List<TurbineUser> list2 = Database .sql(TurbineUser.class, query) .param("groupname", groupname) .fetchList(); UserLiteBean user; // ユーザデータを作成し、返却リストへ格納 for (TurbineUser tuser : list2) { user = new UserLiteBean(); user.initField(); user.setUserId(tuser.getUserId()); user.setName(tuser.getLoginName()); user.setAliasName(tuser.getFirstName(), tuser.getLastName()); list.add(user); } if (!includeLoginuser && login_user_id > 3) { /** 返り値からログインユーザを除く */ for (int i = 0; i < list.size(); i++) { user = list.get(i); if (Integer.valueOf(user.getUserId()) == login_user_id) { list.remove(i); break; } } } return list; } /** * * @param rundata * @return */ public static synchronized List<UserEmailLiteBean> getUserEmailLiteBeansFromGroup( RunData rundata, String groupname, boolean includeLoginuser) { int login_user_id = null != rundata ? ALEipUtils.getUserId(rundata) : 0; ArrayList<UserEmailLiteBean> list = new ArrayList<UserEmailLiteBean>(); // SQLの作成 StringBuffer statement = new StringBuffer(); statement.append("SELECT DISTINCT "); statement .append(" B.USER_ID, B.LOGIN_NAME, B.FIRST_NAME, B.LAST_NAME, B.EMAIL, D.POSITION "); statement.append("FROM turbine_user_group_role as A "); statement.append("LEFT JOIN turbine_user as B "); statement.append(" on A.USER_ID = B.USER_ID "); statement.append("LEFT JOIN turbine_group as C "); statement.append(" on A.GROUP_ID = C.GROUP_ID "); statement.append("LEFT JOIN eip_m_user_position as D "); statement.append(" on A.USER_ID = D.USER_ID "); statement.append("WHERE B.USER_ID > 3 AND B.DISABLED = 'F'"); statement.append(" AND C.GROUP_NAME = #bind($groupname) "); statement.append("ORDER BY D.POSITION"); String query = statement.toString(); List<TurbineUser> list2 = Database .sql(TurbineUser.class, query) .param("groupname", groupname) .fetchList(); UserEmailLiteBean user; // ユーザデータを作成し、返却リストへ格納 for (TurbineUser tuser : list2) { user = new UserEmailLiteBean(); user.initField(); user.setUserId(tuser.getUserId()); user.setName(tuser.getLoginName()); user.setAliasName(tuser.getFirstName(), tuser.getLastName()); user.setEmail(tuser.getEmail()); list.add(user); } if (!includeLoginuser && login_user_id > 3) { /** 返り値からログインユーザを除く */ for (int i = 0; i < list.size(); i++) { user = list.get(i); if (Integer.valueOf(user.getUserId()) == login_user_id) { list.remove(i); break; } } } return list; } /** * * @param rundata * @return */ public static List<UserGroupLiteBean> getUserGroupLiteBeans(RunData rundata, boolean isMygroup, boolean isPost, boolean isFacilityGroup) { List<UserGroupLiteBean> list = new ArrayList<UserGroupLiteBean>(); UserGroupLiteBean bean; try { if (isMygroup) { List<ALEipGroup> mygroup = ALEipUtils.getMyGroups(rundata); int size1 = mygroup.size(); for (int i = 0; i < size1; i++) { ALEipGroup group = mygroup.get(i); bean = new UserGroupLiteBean(); bean.initField(); bean.setGroupId(group.getName().getValue()); bean.setName(group.getAliasName().getValue()); list.add(bean); } } if (isPost) { Map<Integer, ALEipPost> postmap = ALEipManager.getInstance().getPostMap(); for (Iterator<ALEipPost> i = postmap.values().iterator(); i.hasNext();) { ALEipPost post = i.next(); bean = new UserGroupLiteBean(); bean.initField(); bean.setGroupId(post.getGroupName().getValue()); bean.setName(post.getPostName().getValue()); list.add(bean); } } if (isFacilityGroup) { List<ALEipGroup> facilitygroup = ALEipUtils.getFacilityGroups(); int size1 = facilitygroup.size(); for (int i = 0; i < size1; i++) { ALEipGroup group = facilitygroup.get(i); bean = new UserGroupLiteBean(); bean.initField(); bean.setGroupId("f;" + group.getName().getValue()); bean.setName(group.getAliasName().getValue()); list.add(bean); } } } catch (Exception e) { logger.error("UserUtils.getUserGroupLiteBeans", e); } return list; } /** * * @param rundata * @param groupname * @param includeLoginuser * @param keyword * @return */ public static synchronized List<UserPhotoLiteBean> getUserPhotoLiteBeansFromGroup( RunData rundata, String groupname, boolean includeLoginuser, String keyword) { return getUserPhotoLiteBeansFromGroup( rundata, groupname, includeLoginuser, keyword, null); } /** * * @param rundata * @param groupname * @param includeLoginuser * @param keyword * @param rid * @return */ public static synchronized List<UserPhotoLiteBean> getUserPhotoLiteBeansFromGroup( RunData rundata, String groupname, boolean includeLoginuser, String keyword, String rid) { int login_user_id = null != rundata ? ALEipUtils.getUserId(rundata) : 0; ArrayList<UserPhotoLiteBean> list = new ArrayList<UserPhotoLiteBean>(); // SQLの作成 StringBuffer statement = new StringBuffer(); statement.append("SELECT DISTINCT "); statement .append(" B.USER_ID, B.LOGIN_NAME, B.FIRST_NAME, B.LAST_NAME, B.HAS_PHOTO, B.PHOTO_MODIFIED, D.POSITION "); statement.append("FROM turbine_user_group_role as A "); statement.append("LEFT JOIN turbine_user as B "); statement.append(" on A.USER_ID = B.USER_ID "); statement.append("LEFT JOIN turbine_group as C "); statement.append(" on A.GROUP_ID = C.GROUP_ID "); statement.append("LEFT JOIN eip_m_user_position as D "); statement.append(" on A.USER_ID = D.USER_ID "); if (rid == null) { statement.append("WHERE B.USER_ID > 3 AND B.DISABLED = 'F'"); } else { statement.append("LEFT JOIN eip_t_message_room_member as E "); statement.append(" on A.USER_ID = E.USER_ID "); statement .append("WHERE B.USER_ID > 3 AND (B.DISABLED = 'F' OR ( B.DISABLED = 'N' AND E.ROOM_ID = "); statement.append(" #bind($roomid) "); statement.append("))"); } statement.append(" AND C.GROUP_NAME = #bind($groupname) "); if (keyword != null && !keyword.equals("")) { statement.append(" AND ( "); statement.append(" B.FIRST_NAME LIKE #bind($keyword1) "); statement.append(" OR B.LAST_NAME LIKE #bind($keyword2) "); statement.append(" OR B.FIRST_NAME_KANA LIKE #bind($keyword3) "); statement.append(" OR B.LAST_NAME_KANA LIKE #bind($keyword4) "); statement.append(" OR B.EMAIL LIKE #bind($keyword5) "); statement.append(" OR B.LOGIN_NAME LIKE #bind($keyword6) "); statement.append(" OR B.CODE LIKE #bind($keyword7) "); statement.append(" ) "); } statement.append("ORDER BY D.POSITION"); String query = statement.toString(); SQLTemplate<TurbineUser> param = Database.sql(TurbineUser.class, query); if (rid != null) { param.param("roomid", Integer.valueOf(rid)); } param.param("groupname", groupname); if (keyword != null && !keyword.equals("")) { param.param("keyword1", "%" + keyword + "%"); param.param("keyword2", "%" + keyword + "%"); param.param("keyword3", "%" + keyword + "%"); param.param("keyword4", "%" + keyword + "%"); param.param("keyword5", "%" + keyword + "%"); param.param("keyword6", "%" + keyword + "%"); param.param("keyword7", "%" + keyword + "%"); } List<TurbineUser> list2 = param.fetchList(); UserPhotoLiteBean user; // ユーザデータを作成し、返却リストへ格納 for (TurbineUser tuser : list2) { user = new UserPhotoLiteBean(); user.initField(); user.setUserId(tuser.getUserId()); user.setName(tuser.getLoginName()); user.setAliasName(tuser.getFirstName(), tuser.getLastName()); user.setHasPhoto("T".equals(tuser.getHasPhoto()) || "N".equals(tuser.getHasPhoto())); user.setPhotoModified(tuser.getPhotoModified().getTime()); list.add(user); } if (!includeLoginuser && login_user_id > 3) { /** 返り値からログインユーザを除く */ for (int i = 0; i < list.size(); i++) { user = list.get(i); if (Integer.valueOf(user.getUserId()) == login_user_id) { list.remove(i); break; } } } return list; } }