/*
* 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.cellular;
import java.util.ArrayList;
import java.util.List;
import org.apache.jetspeed.om.security.UserNamePrincipal;
import org.apache.jetspeed.services.JetspeedUserManagement;
import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
import org.apache.jetspeed.services.logging.JetspeedLogger;
import org.apache.jetspeed.services.resources.JetspeedResources;
import org.apache.jetspeed.services.rundata.JetspeedRunData;
import org.apache.jetspeed.services.security.JetspeedSecurityException;
import org.apache.turbine.util.RunData;
import org.apache.velocity.context.Context;
import com.aimluck.commons.field.ALStringField;
import com.aimluck.eip.cellular.util.CellularUtils;
import com.aimluck.eip.common.ALAbstractFormData;
import com.aimluck.eip.common.ALBaseUser;
import com.aimluck.eip.common.ALDBErrorException;
import com.aimluck.eip.common.ALEipUser;
import com.aimluck.eip.common.ALPageNotFoundException;
import com.aimluck.eip.mail.ALAdminMailContext;
import com.aimluck.eip.mail.ALAdminMailMessage;
import com.aimluck.eip.mail.ALMailService;
import com.aimluck.eip.mail.util.ALEipUserAddr;
import com.aimluck.eip.mail.util.ALMailUtils;
import com.aimluck.eip.modules.actions.common.ALAction;
import com.aimluck.eip.orm.Database;
import com.aimluck.eip.services.orgutils.ALOrgUtilsService;
import com.aimluck.eip.util.ALEipUtils;
/**
* フォームデータを管理するクラス
*
*/
public class CellularFormData extends ALAbstractFormData {
/** logger */
private static final JetspeedLogger logger = JetspeedLogFactoryService
.getLogger(CellularFormData.class.getName());
/** 簡易アクセス用 URL */
private ALStringField cellular_url;
/** 簡易ログイン設定の有効/無効 */
private boolean enableEasyLogin;
/** ログインユーザー */
private ALBaseUser baseUser;
private String url;
private String orgId;
@Override
public void init(ALAction action, RunData rundata, Context context)
throws ALPageNotFoundException, ALDBErrorException {
super.init(action, rundata, context);
enableEasyLogin = false;
orgId = Database.getDomainName();
JetspeedRunData jdata = (JetspeedRunData) rundata;
try {
// 最新のユーザ情報を取得する.
baseUser =
(ALBaseUser) JetspeedUserManagement.getUser(new UserNamePrincipal(jdata
.getJetspeedUser()
.getUserName()));
} catch (JetspeedSecurityException e) {
baseUser = (ALBaseUser) rundata.getUser();
}
url = CellularUtils.getCellularUrl(rundata, context);
}
/**
* 各フィールドを初期化する.
*
*
*/
@Override
public void initField() {
cellular_url = new ALStringField();
cellular_url.setFieldName(ALOrgUtilsService.getAlias() + "サイトのアドレス");
cellular_url.setTrim(true);
}
/**
* 各フィールドに対する制約条件を設定します。 <BR>
*
*
*/
@Override
protected void setValidator() {
}
/**
* フォームに入力されたデータの妥当性を検証する.
*
* @param msgList
* @return
*
*/
@Override
protected boolean validate(List<String> msgList) {
return (msgList.size() == 0);
}
/**
*
* @param rundata
* @param context
* @param msgList
* @return
*/
@Override
protected boolean loadFormData(RunData rundata, Context context,
List<String> msgList) {
String uid = baseUser.getCelluarUId();
enableEasyLogin = (uid != null && uid.length() > 0);
cellular_url.setValue(url);
return true;
}
/**
*
* @param rundata
* @param context
* @param msgList
* @return
*/
@Override
protected boolean insertFormData(RunData rundata, Context context,
List<String> msgList) {
boolean res = true;
cellular_url.setValue(url);
try {
if (url == null || url.length() == 0) {
msgList.add(ALOrgUtilsService.getAlias()
+ "サイトのアドレスが未設定のため、メールを送信できませんでした。"
+ ALOrgUtilsService.getAlias()
+ "の管理担当者にお問い合わせください。"
+ ALOrgUtilsService.getAlias()
+ "サイトのアドレスは、管理画面で設定できます。");
return false;
}
ALEipUser user = ALEipUtils.getALEipUser(rundata);
List<ALEipUser> memberList = new ArrayList<ALEipUser>();
memberList.add(ALEipUtils.getALEipUser(rundata));
List<ALEipUserAddr> destMemberList =
ALMailUtils.getALEipUserAddrs(
memberList,
ALEipUtils.getUserId(rundata),
true);
ALEipUserAddr addr = null;
addr = destMemberList.get(0);
if (addr.getCellMailAddr() == null || addr.getCellMailAddr().equals("")) {
msgList
.add("ユーザーの携帯電話のメールアドレスが設定されていないため、メールを送信できませんでした。携帯電話のメールアドレスは、個人設定のユーザー情報から変更できます。");
return false;
}
String subject = "[" + ALOrgUtilsService.getAlias() + "] 携帯電話用ログインURL";
String body = createMsgForCellPhone(url);
List<ALAdminMailMessage> messageList =
new ArrayList<ALAdminMailMessage>();
for (ALEipUserAddr destMember : destMemberList) {
ALAdminMailMessage message = new ALAdminMailMessage(destMember);
message.setPcSubject(null);
message.setCellularSubject(subject);
message.setPcBody(null);
message.setCellularBody(body);
messageList.add(message);
}
List<String> errors =
ALMailService.sendAdminMail(new ALAdminMailContext(orgId, (int) user
.getUserId()
.getValue(), messageList, ALMailUtils.VALUE_MSGTYPE_DEST_CELLULAR));
msgList.addAll(errors);
if (errors.size() > 0) {
msgList.add("メールアカウントが正しく設定されていないため、メールを送信できませんでした。"
+ ALOrgUtilsService.getAlias()
+ "の管理担当者にお問い合わせください。メールアカウントは、管理画面で設定できます。");
res = false;
}
} catch (Exception ex) {
logger.error("cellular", ex);
return false;
}
return res;
}
/**
*
* @param rundata
* @param context
* @param msgList
* @return
*/
@Override
protected boolean updateFormData(RunData rundata, Context context,
List<String> msgList) {
return false;
}
/**
*
* @param rundata
* @param context
* @param msgList
* @return
*/
@Override
protected boolean deleteFormData(RunData rundata, Context context,
List<String> msgList) {
return false;
}
/**
* 携帯電話へ送信するメールの内容を作成する.
*
* @return
*/
private String createMsgForCellPhone(String url) {
String CR = System.getProperty("line.separator");
StringBuffer body =
new StringBuffer(JetspeedResources.getString("aipo.alias"));
body.append("からのお知らせです。以下に記載されたURLから");
body.append(ALOrgUtilsService.getAlias());
body.append("にログインしてください。");
body.append("ログインするときには通常使用しているログインパスワードを入力してください。").append(CR).append(CR);
body.append(url).append(CR);
return body.toString();
}
public ALStringField getCellularUrl() {
return cellular_url;
}
public boolean enableEasyLogin() {
return enableEasyLogin;
}
}