##### Coverage Report - jp.co.y_net.amm.page.OrgDetailPage

Classes in this File | Line Coverage | Branch Coverage | Complexity

OrgDetailPage

0% | 0/157

0% | 0/34

0.0;0

OrgDetailPage$1

0% | 0/7

0% | 0/4

0.0;0

OrgDetailPage$10

0% | 0/3

0% | 0/2

0.0;0

OrgDetailPage$11

0% | 0/120

0% | 0/94

0.0;0

OrgDetailPage$12

0% | 0/21

0% | 0/12

0.0;0

OrgDetailPage$2

0% | 0/5

0% | 0/2

0.0;0

OrgDetailPage$3

0% | 0/5

0% | 0/2

0.0;0

OrgDetailPage$4

0% | 0/2

N/A | N/A

0.0;0

OrgDetailPage$5

0% | 0/3

N/A | N/A

0.0;0

OrgDetailPage$6

0% | 0/3

N/A | N/A

0.0;0

OrgDetailPage$7

0% | 0/7

0% | 0/4

0.0;0

OrgDetailPage$8

0% | 0/5

0% | 0/2

0.0;0

OrgDetailPage$9

0% | 0/5

0% | 0/2

0.0;0

OrgDetailPage$DateDropDownOnchangeBehavior

0% | 0/6

N/A | N/A

0.0;0

1

0

     package jp.co.y_net.amm.page;

2

3

     import java.util.List;

4

5

     import jp.co.y_net.amm.AppSession;

6

     import jp.co.y_net.amm.AppSession.LoginUser;

7

     import jp.co.y_net.amm.common.AppStringUtils;

8

     import jp.co.y_net.amm.common.AppUtils;

9

     import jp.co.y_net.amm.common.CalcHash;

10

     import jp.co.y_net.amm.common.ChoiceDateElement;

11

     import jp.co.y_net.amm.common.ChoiceDateElement.DropDownChoiceDate;

12

     import jp.co.y_net.amm.common.ChoiceElement;

13

     import jp.co.y_net.amm.dao.Org;

14

     import jp.co.y_net.amm.dao.Usr;

15

16

     import org.apache.commons.lang.StringUtils;

17

     import org.apache.wicket.ajax.AjaxRequestTarget;

18

     import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;

19

     import org.apache.wicket.markup.html.basic.Label;

20

     import org.apache.wicket.markup.html.form.Button;

21

     import org.apache.wicket.markup.html.form.DropDownChoice;

22

     import org.apache.wicket.markup.html.form.Form;

23

     import org.apache.wicket.markup.html.form.PasswordTextField;

24

     import org.apache.wicket.markup.html.form.TextField;

25

     import org.apache.wicket.model.Model;

26

     import org.apache.wicket.model.PropertyModel;

27

     import org.apache.wicket.request.mapper.parameter.PageParameters;

28

29

     /**

30

      * 機関情報詳細

31

      * @author k_inaba

32

      */

33

     public class OrgDetailPage extends CommonFrameA {

34

         private static final long serialVersionUID = 1L;

35

36

         /*

37

          * 画面入力値

38

          */

39

         public String kindValue;

40

         public String nameValue;

41

         public String adminnameValue;

42

         public String adminnamekanaValue;

43

         public String postnumValue;

44

         public String addressValue;

45

         public String telnumValue;

46

         public String mailValue;

47

         public String mail2Value;

48

         public String passwordValue;

49

         public String password2Value;

50

         public String fromdateValue;

51

         public String todateValue;

52

         public String limitnumValue;

53

54

         /*

55

          * 画面の状態

56

          */

57

0

         private boolean completeMod = false;

58

0

         private boolean completeDel = false;

59

60

         /**

61

          * ログインチェック定義

62

          * @see jp.co.y_net.amm.page.AppPage#validateLogin()

63

          */

64

         @Override

65

         public boolean validateLogin() {

66

0

             if(AppSession.get().isLogin()) {

67

0

                 if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_運営管理者)) {

68

0

                     return true;

69

                 }

70

0

                 if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_機関管理者)) {

71

0

                     return true;

72

                 }

73

             }

74

0

             return false;

75

         }

76

77

0

         public OrgDetailPage(PageParameters pageParams) {

78

79

             /* 共通戻るリンクの設置 */

80

0

             createCommonBackLinks();

81

82

             /* 画面固有の戻るボタンの設置 */

83

0

             createBackLink(OrgMemberListPage.class, "登録会員情報管理");

84

85

             /* フィードバックパネルの設置 */

86

0

             createFeedbackPanel();

87

88

             /* 入力フォーム */

89

0

             final Form<Void> form  = new Form<Void>("form");

90

0

             add(form);

91

92

             /* 初期表示エラーチェック ----------------------------------------------------------------------------------- */

93

0

             form.setVisible(false); // Formはエラーチェックが完了するまで非表示とする。

94

95

0

             final LoginUser loginUser  = AppSession.get().getLoginUser();

96

0

             if(loginUser == null) {

97

0

                 error("ログイン情報が取得できません。");

98

0

                 return; // ----------中断

99

             }

100

0

             final Integer loginUserId = loginUser.getUsrid();

101

102

0

             String paramOrgid = pageParams.get("orgid").toString("");

103

             Integer targetOrgid;

104

0

             if(StringUtils.isEmpty(paramOrgid)) {

105

                 /*

106

                  * パラメータ orgid が指定されていなければ、ログインユーザに紐づく機関情報を対象とする。

107

                  * 　ただし、機関管理者か、運営管理者に限る。

108

                  */

109

0

                 if (isOrgAdmin() || isSystemAdmin()) {

110

0

                     targetOrgid = loginUser.getOrgid();

111

112

0

                 } else {

113

0

                     error("パラメータ orgid がありません。");

114

0

                     return; // ----------中断

115

116

                 }

117

             } else {

118

0

                 targetOrgid = AppUtils.toInteger(paramOrgid);

119

             }

120

0

             final Org targetOrg = orgDao.getByOrgid(targetOrgid);

121

0

             if (targetOrg == null) {

122

0

                 error("該当する登録会員情報がありません。");

123

0

                 return; // ----------中断

124

             }

125

0

             if(isSystemAdmin()) {

126

                 /* 機関管理者が他機関の情報にアクセスしてはいけない */

127

0

                 if(AppUtils.equals(loginUser.getOrgid(), targetOrg.getOrgid()) == false && isSystemAdmin() == false) {

128

0

                     error("該当する情報を扱う権限がありません。");

129

0

                     return; // ----------中断

130

                 }

131

             }

132

133

             final Usr target代表者;

134

             {

135

0

                 Usr cnd = new Usr();

136

0

                 cnd.setOrgid(targetOrgid);

137

0

                 cnd.setOrgrole(1); // 代表者

138

0

                 List<Usr> users = usrDao.get(cnd);

139

0

                 if(users.size() != 1) {

140

0

                     error("代表者のデータが取得できません。");

141

0

                     return; // ----------中断

142

                 } else {

143

0

                     target代表者 = users.get(0);

144

                 }

145

             }

146

147

148

0

             if(hasInputError()) return; // ----------エラーがあれば中止

149

0

             form.setVisible(true);

150

151

             /* Form内の設定 ----------------------------------------------------------------------------------------------*/

152

153

             /* 完了メッセージ */

154

0

             Model<String> resultMessageModel = new Model<String>() {

155

                 @Override

156

                 public String getObject() {

157

0

                     if(completeMod) {

158

0

                         return "登録会員情報を変更しました。";

159

                     }

160

0

                     if(completeDel) {

161

0

                         return "登録会員情報を削除しました。";

162

                     }

163

0

                     return "";

164

                 }

165

             };

166

0

             final Label resutlMessage = new Label("resutlMessage", resultMessageModel);

167

0

             form.add(resutlMessage);

168

169

             /* 組織IDの出力 */

170

0

             form.add(new Label("orgid", Model.of(targetOrg.getOrgid())));

171

172

173

             /* 入力コンポーネントの設定 ----------------------------------------------------------------------------------*/

174

175

     //        kindValue = AppUtils.toStr(targetOrg.getKind());

176

0

             nameValue = targetOrg.getName();

177

     //        adminnameValue = targetOrg.getAdminname();

178

0

             adminnameValue = target代表者.getName();

179

0

             adminnamekanaValue = targetOrg.getAdminnamekana();

180

0

             postnumValue = targetOrg.getPostnum_Disp(); // ハイフン付きへ変換

181

0

             addressValue = targetOrg.getAddress();

182

0

             telnumValue = targetOrg.getTelnum();

183

     //        mailValue = targetOrg.getMail();

184

0

             mailValue = target代表者.getLoginid();

185

0

             mail2Value = "";

186

0

             fromdateValue = AppUtils.toStr(targetOrg.getFromdate());

187

0

             todateValue = AppUtils.toStr(targetOrg.getTodate());

188

0

             limitnumValue = AppUtils.toStr(targetOrg.getLimitnum());

189

0

             if(StringUtils.isEmpty(limitnumValue)) {

190

0

                 limitnumValue = "-1";

191

             }

192

193

             /* 会員の種類 */

194

0

             form.add(new Label("kind", Model.of(targetOrg.getKind_Disp())));

195

196

             /* 団体名称 */

197

0

             TextField<String> name = new TextField<String>("name", new PropertyModel<String>(this, "nameValue")){

198

                 @Override

199

                 public boolean isVisible() {

200

0

                     if(targetOrg.isPersonalOrg()) { // 個人の場合は非表示

201

0

                         return false;

202

                     }

203

0

                     return true;

204

                 }

205

             };

206

0

             form.add(name);

207

208

             /* 管理者氏名 */

209

0

             final Label thAdminname = new Label("thAdminname", new Model<String>(){

210

                 @Override

211

                 public String getObject() {

212

0

                     if(targetOrg.isPersonalOrg() == false) {

213

0

                         return "代表者氏名";

214

                     }

215

0

                     return "氏名";

216

                 }

217

             }){

218

             };

219

0

             form.add(thAdminname);

220

0

             TextField<String> adminname = new TextField<String>("adminname", new PropertyModel<String>(this, "adminnameValue"));

221

0

             form.add(adminname);

222

223

             /* ふりがな */

224

0

             TextField<String> adminnamekana = new TextField<String>("adminnamekana", new PropertyModel<String>(this, "adminnamekanaValue"));

225

0

             form.add(adminnamekana);

226

227

             /* 連絡先郵便番号 */

228

0

             TextField<String> postnum = new TextField<String>("postnum", new PropertyModel<String>(this, "postnumValue"));

229

0

             form.add(postnum);

230

231

             /* 連絡先住所 */

232

0

             TextField<String> address = new TextField<String>("address", new PropertyModel<String>(this, "addressValue"));

233

0

             form.add(address);

234

235

             /* 連絡先電話番号 */

236

0

             TextField<String> telnum = new TextField<String>("telnum", new PropertyModel<String>(this, "telnumValue"));

237

0

             form.add(telnum);

238

239

             /* 連絡先メールアドレス */

240

0

             TextField<String> mail = new TextField<String>("mail", new PropertyModel<String>(this, "mailValue"));

241

0

             form.add(mail);

242

243

             /* 連絡先メールアドレス確認用 */

244

0

             TextField<String> mail2 = new TextField<String>("mail2", new PropertyModel<String>(this, "mail2Value"));

245

0

             form.add(mail2);

246

247

             /* パスワード */

248

0

             final PasswordTextField password = new PasswordTextField("password", new PropertyModel<String>(this, "passwordValue")){

249

                 @Override

250

                 public boolean isVisible() {

251

                     /* ログインユーザ自身の情報でなければ画面から変更できない */

252

0

                     return isLoginUser(target代表者);

253

                 }

254

             };

255

0

             password.setRequired(false);

256

0

             form.add(password);

257

258

             /* パスワード確認用 */

259

0

             PasswordTextField password2 = new PasswordTextField("password2", new PropertyModel<String>(this, "password2Value")){

260

                 @Override

261

                 public boolean isVisible() {

262

                     /* ログインユーザ自身の情報でなければ画面から変更できない */

263

0

                     return isLoginUser(target代表者);

264

                 }

265

             };

266

0

             password2.setRequired(false);

267

0

             form.add(password2);

268

269

             /* 利用可能期間 ---------------------------------------------------------------------------------------  */

270

271

0

             List<ChoiceDateElement> choiceY = ChoiceDateElement.createChoiceY(fromdateValue, todateValue);

272

0

             List<ChoiceDateElement> choiceM = ChoiceDateElement.createChoiceM();

273

0

             List<ChoiceDateElement> choiceD = ChoiceDateElement.createChoiceD();

274

275

0

             final Model<ChoiceDateElement> fromdateYModel = ChoiceDateElement.createModelY(choiceY, fromdateValue);

276

0

             final Model<ChoiceDateElement> fromdateMModel = ChoiceDateElement.createModelM(choiceM, fromdateValue);

277

0

             final Model<ChoiceDateElement> fromdateDModel = ChoiceDateElement.createModelD(choiceD, fromdateValue);

278

279

0

             final Model<ChoiceDateElement> todateYModel = ChoiceDateElement.createModelY(choiceY, todateValue);

280

0

             final Model<ChoiceDateElement> todateMModel = ChoiceDateElement.createModelM(choiceM, todateValue);

281

0

             final Model<ChoiceDateElement> todateDModel = ChoiceDateElement.createModelD(choiceD, todateValue);

282

283

0

             final DropDownChoiceDate fromdateY = new DropDownChoiceDate("fromdateY", fromdateYModel, choiceY);

284

0

             form.add(fromdateY);

285

0

             final DropDownChoiceDate fromdateM = new DropDownChoiceDate("fromdateM", fromdateMModel, choiceM);

286

0

             form.add(fromdateM);

287

0

             final DropDownChoiceDate fromdateD = new DropDownChoiceDate("fromdateD", fromdateDModel, choiceD);

288

0

             form.add(fromdateD);

289

290

0

             final DropDownChoiceDate todateY = new DropDownChoiceDate("todateY", todateYModel, choiceY);

291

0

             form.add(todateY);

292

0

             final DropDownChoiceDate todateM = new DropDownChoiceDate("todateM", todateMModel, choiceM);

293

0

             form.add(todateM);

294

0

             final DropDownChoiceDate todateD = new DropDownChoiceDate("todateD", todateDModel, choiceD);

295

0

             form.add(todateD);

296

297

0

             if(isSystemAdmin() == false) { // 運営管理者にのみ表示する編集項目

298

0

                 fromdateY.setVisible(false);

299

0

                 fromdateM.setVisible(false);

300

0

                 fromdateD.setVisible(false);

301

0

                 todateY.setVisible(false);

302

0

                 todateM.setVisible(false);

303

0

                 todateD.setVisible(false);

304

             }

305

             /* 即時日付チェック */

306

0

             final Label quickMsgFromto = new Label("quickMsgFromto", new Model<String>(){

307

                 @Override

308

                 public String getObject() {

309

     //                fromdateY.getModelObject().getId()

310

0

                     String tmpFromdate = ChoiceDateElement.日付取得(fromdateYModel, fromdateMModel, fromdateDModel);

311

0

                     String tmpTodate = ChoiceDateElement.日付取得(todateYModel, todateMModel, todateDModel);

312

313

0

                     if(validFromToDate(tmpFromdate) == false || validFromToDate(tmpTodate) == false) {

314

0

                         return "日付が正しくありません。";

315

                     } else {

316

0

                         return "";

317

                     }

318

                 }

319

             });

320

0

             quickMsgFromto.setOutputMarkupId(true);

321

0

             form.add(quickMsgFromto);

322

323

             /* ドロップダウン変更時の挙動を設定 */

324

0

             fromdateY.add(new DateDropDownOnchangeBehavior(quickMsgFromto));

325

0

             fromdateM.add(new DateDropDownOnchangeBehavior(quickMsgFromto));

326

0

             fromdateD.add(new DateDropDownOnchangeBehavior(quickMsgFromto));

327

0

             todateY.add(new DateDropDownOnchangeBehavior(quickMsgFromto));

328

0

             todateM.add(new DateDropDownOnchangeBehavior(quickMsgFromto));

329

0

             todateD.add(new DateDropDownOnchangeBehavior(quickMsgFromto));

330

331

             /* 利用可能期間 ここまで ----------------------------------------------------------------------------------  */

332

333

             /* 登録可能会員数 */

334

0

             List<ChoiceElement> choiceLimitnum = Org.createLimitChices(limitnumValue);

335

0

             final Model<ChoiceElement> limitnumModel = new Model<ChoiceElement>();

336

0

             ChoiceElement.setDropDownList(limitnumModel, choiceLimitnum, String.valueOf(limitnumValue)); // 初期値設定

337

338

0

             final DropDownChoice<ChoiceElement> limitnum = new DropDownChoice<ChoiceElement>(

339

0

                     "limitnum", limitnumModel, choiceLimitnum, new ChoiceElement.Renderer());

340

0

             form.add(limitnum);

341

342

0

             if(isSystemAdmin() == false) { // 運営管理者にのみ表示する編集項目

343

0

                 limitnum.setVisible(false);

344

             }

345

346

347

             /* 組織「運営管理」を編集する場合の表示制御 ------------------------------------------------------------------*/

348

0

             if(targetOrg.getKind().equals(Org.KIND_運営管理)) {

349

                 /* 次の項目を非表示 */

350

0

                 adminnamekana.setVisible(false); // ふりがな

351

0

                 postnum.setVisible(false); // 連絡先郵便番号

352

0

                 address.setVisible(false); // 連絡先住所

353

0

                 telnum.setVisible(false); // 連絡先電話番号

354

0

                 limitnum.setVisible(false); // 登録可能会員数

355

                 /* 利用可能期間 */

356

0

                 fromdateY.setVisible(false);

357

0

                 fromdateM.setVisible(false);

358

0

                 fromdateD.setVisible(false);

359

0

                 todateY.setVisible(false);

360

0

                 todateM.setVisible(false);

361

0

                 todateD.setVisible(false);

362

             }

363

364

             /* 表示コンポーネントの設定 ----------------------------------------------------------------------------------*/

365

366

0

             form.add(new Label("thLoginid", new Model<String>(){

367

                 @Override

368

                 public String getObject() {

369

0

                     if(targetOrg.getKind().equals(Org.KIND_運営管理) == false) {

370

0

                         return "連絡先メールアドレス";

371

                     } else {

372

0

                         return "ログインID";

373

                     }

374

                 }

375

             }));

376

0

             form.add(new Label("thLoginid2", new Model<String>(){

377

                 @Override

378

                 public String getObject() {

379

0

                     if(targetOrg.getKind().equals(Org.KIND_運営管理) == false) {

380

0

                         return "連絡先メールアドレス確認用";

381

                     } else {

382

0

                         return "ログインID確認用";

383

                     }

384

                 }

385

             }));

386

387

             /* 代表者によるメールアドレス変更のメッセージ */

388

0

             form.add(new Label("msgpwreset", "※ メールアドレスを変更するとパスワードがリセットされます。") {

389

                 @Override

390

                 public boolean isVisible() {

391

                     /* パスワード欄から変更できない場合はパスワードリセット */

392

0

                     return password.isVisible() == false;

393

                 }

394

             });

395

396

397

             /* パスワード情報 */

398

0

             PasswordInfoPanel passwordInfoPanel = new PasswordInfoPanel("PasswordInfoPanel",

399

0

                     target代表者,

400

0

                     isSystemAdmin());

401

0

             form.add(passwordInfoPanel);

402

403

404

             /* 処理ボタン定義 --------------------------------------------------------------------------------------------*/

405

406

             /*

407

              * 【更新する】

408

              */

409

0

             Button btnSubmitMod = new ConfirmAjaxButton("btnSubmitMod") {

410

                 @Override

411

                 String getConfirmMessage() {

412

0

                     return "更新します。";

413

                 }

414

                 @Override

415

                 boolean executeBefore() {

416

                     /* モデル(PropertyModel以外)から値取得 */

417

0

                     fromdateValue = ChoiceDateElement.日付取得(fromdateYModel, fromdateMModel, fromdateDModel);

418

0

                     todateValue = ChoiceDateElement.日付取得(todateYModel, todateMModel, todateDModel);

419

0

                     if(limitnumModel.getObject() == null) {

420

0

                         limitnumValue = String.valueOf(Org.LIMITNUM_未指定);

421

0

                     } else {

422

0

                         limitnumValue = limitnumModel.getObject().getId();

423

                     }

424

                     /* 入力値変換 */

425

     //                kindValue = AppStringUtils.trim(kindModel);

426

0

                     nameValue = AppStringUtils.trim(nameValue);

427

0

                     adminnameValue = AppStringUtils.trim(adminnameValue);

428

0

                     adminnamekanaValue = AppStringUtils.trim(adminnamekanaValue);

429

0

                     postnumValue = AppStringUtils.trimHalf(postnumValue);

430

0

                     postnumValue = postnumValue.replaceAll("-", "");// 郵便番号からハイフン除去

431

0

                     addressValue = AppStringUtils.trim(addressValue);

432

0

                     telnumValue = AppStringUtils.trimHalf(telnumValue);

433

0

                     mailValue = AppStringUtils.trimHalf(mailValue);

434

0

                     mail2Value = AppStringUtils.trimHalf(mail2Value);

435

0

                     passwordValue = AppStringUtils.trimHalf(passwordValue);

436

0

                     password2Value = AppStringUtils.trimHalf(password2Value);

437

0

                     if(isSystemAdmin()) {

438

439

0

                         fromdateValue = AppStringUtils.trimHalf(fromdateValue);

440

0

                         todateValue = AppStringUtils.trimHalf(todateValue);

441

442

0

                         limitnumValue = AppStringUtils.trimHalf(limitnumValue);

443

                     }

444

445

0

                     boolean isメールアドレスが変更されている = (mailValue.equals(target代表者.getLoginid()) == false);

446

0

                     boolean isパスワード欄が入力されている = (StringUtils.isEmpty(passwordValue) == false);

447

448

                     /* 入力値検査 */

449

     //                validItemNum(kindValue, "会員の種類", 1, 1);

450

0

                     validItem(nameValue, "機関・団体名称", 0, 512);

451

0

                     validItem(adminnameValue, thAdminname.getDefaultModelObjectAsString(), 1, 512); // 代表者氏名 or 氏名

452

453

454

0

                     if(targetOrg.getKind().equals(Org.KIND_運営管理)) {

455

                         /* 組織「運営管理」を編集する場合のチェック */

456

0

                         validItem(mailValue, "ログインID確認用", 1, 256);

457

458

0

                     } else {

459

                         /* 通常のチェック */

460

0

                         validItem(adminnamekanaValue, "ふりがな", 1, 512);

461

0

                         validItemNum(postnumValue, "連絡先郵便番号", 7, 7);

462

0

                         validItem(addressValue, "連絡先住所", 1, 1024);

463

0

                         validItemTel(telnumValue, "連絡先電話番号", 1, 32);

464

0

                         validItemMail(mailValue, "連絡先メールアドレス");

465

0

                         if(isSystemAdmin()) {

466

0

                             validItemNum(limitnumValue, "登録可能会員数", 0, 4);

467

                         }

468

0

                         if(hasInputError()) return false; // ここまででエラーチェック

469

470

0

                         if(isSystemAdmin() && validFromToDate(fromdateValue) == false) {

471

0

                             error("利用可能期間(開始)が日付として正しくありません。");

472

                         }

473

0

                         if(isSystemAdmin() && validFromToDate(todateValue) == false) {

474

0

                             error("利用可能期間(終了)が日付として正しくありません。");

475

                         }

476

                     }

477

478

0

                     if(hasInputError()) return false; // ここまででエラーチェック

479

480

0

                     if(isメールアドレスが変更されている) {

481

482

0

                         if(targetOrg.getKind().equals(Org.KIND_運営管理)) {

483

                             /* 組織「運営管理」を編集する場合のチェック */

484

0

                             validItem(mail2Value, "ログインID確認用", 1, 256);

485

0

                             if(hasInputError()) return false; // ここまででエラーチェック

486

487

0

                             if(mailValue.equals(mail2Value) == false) {

488

0

                                 error("ログインIDが一致しません。");

489

                             }

490

0

                             if(mailAddressCheck.exist(mailValue)) {

491

0

                                 error("このログインIDは既に使用されています。");

492

                             }

493

494

0

                         } else {

495

                             /* 通常のチェック */

496

0

                             validItemMail(mail2Value, "メールアドレス確認用");

497

498

0

                             if(hasInputError()) return false; // ここまででエラーチェック

499

500

0

                             if(mailValue.equals(mail2Value) == false) {

501

0

                                 error("メールアドレスが一致しません。");

502

                             }

503

0

                             if(mailAddressCheck.exist(mailValue)) {

504

0

                                 error("このメールアドレスは既に使用されています。");

505

                             }

506

                         }

507

508

                     }

509

510

0

                     if (isパスワード欄が入力されている) {

511

0

                         validItemAscii(passwordValue, "パスワード", 8, 16);

512

0

                         validItemAscii(password2Value, "パスワード確認用", 8, 16);

513

                     }

514

515

0

                     if(hasInputError()) return false; // ここまででエラーチェック

516

517

0

                     if(isパスワード欄が入力されている) {

518

0

                         if(passwordValue.equals(password2Value) == false) {

519

0

                             error("パスワードが一致しません。");

520

                         }

521

                     }

522

0

                     if(hasInputError()) return false; // ここまででエラーチェック

523

524

                     /*

525

                      * パスワードの変更について

526

                      *  メールアドレスが変更されている場合は、パスワードの変更が必須である。

527

                      *  パスワード欄が入力できるのは変更対象の情報が、ログインユーザ本人であるときのみ。

528

                      *  パスワード欄が入力できない場合（代表者や運営管理者による変更）は、パスワードリセットを実施する。

529

                      */

530

     //                boolean パスワードリセットが必要 = false;

531

0

                     if(isメールアドレスが変更されている) {

532

533

0

                         if(isLoginUser(target代表者) ) {

534

                             /* 変更対象の情報が、ログインユーザ本人 */

535

536

0

                             if(isパスワード欄が入力されている) {

537

                                 // 正しい

538

                             } else {

539

0

                                 error("メールアドレスを変更する場合は、パスワードも設定してください。");

540

                             }

541

542

0

                         } else if(isSystemAdmin() ) {

543

                             /* パスワード欄が入力できない場合（代表者や運営管理者による変更） */

544

     //                        パスワードリセットが必要 = true;

545

                         } else {

546

                             /* 通常想定されない条件 */

547

0

                             error("メールアドレスを変更することはできません。");

548

                         }

549

                     }

550

551

552

0

                     if(hasInputError()) return false; // ここまででエラーチェック

553

554

0

                     return true;

555

                 }

556

                 @Override

557

                 void executeAfter(AjaxRequestTarget target) {

558

559

                     /* データアクセス 代表者による登録会員情報の変更  */

560

561

     //                targetOrg.setKind(Integer.parseInt(kindValue));

562

0

                     targetOrg.setName(nameValue);

563

0

                     targetOrg.setAdminname(adminnameValue);

564

0

                     targetOrg.setAdminnamekana(adminnamekanaValue);

565

0

                     targetOrg.setPostnum(postnumValue);

566

0

                     targetOrg.setTelnum(telnumValue);

567

0

                     targetOrg.setAddress(addressValue);

568

0

                     targetOrg.setMail(mailValue);

569

0

                     if(isSystemAdmin()) {

570

0

                         if(StringUtils.isEmpty(fromdateValue) == false) {

571

0

                             int i = AppUtils.toInteger(fromdateValue);

572

0

                             if(i == 0) {

573

0

                                 i = -1; // 未指定は「-1」とする。

574

                             }

575

0

                             targetOrg.setFromdate(i);

576

                         }

577

0

                         if(StringUtils.isEmpty(todateValue) == false) {

578

0

                             int i = AppUtils.toInteger(todateValue);

579

0

                             if(i == 0) {

580

0

                                 i = -1; // 未指定は「-1」とする。

581

                             }

582

0

                             targetOrg.setTodate(i);

583

                         }

584

0

                         if(StringUtils.isEmpty(limitnumValue) == false) {

585

0

                             targetOrg.setLimitnum(AppUtils.toInteger(limitnumValue));

586

                         }

587

                     }

588

589

0

                     orgDao.update(targetOrg, loginUserId); // 【更新処理】

590

591

592

                     // 代表者の氏名、メールアドレス、パスワードの変更についてユーザー情報も変更する。

593

594

0

                     boolean isメールアドレスが変更されている = (mailValue.equals(target代表者.getLoginid()) == false);

595

0

                     boolean isパスワード欄が入力されている = (StringUtils.isEmpty(passwordValue) == false);

596

597

0

                     if(isメールアドレスが変更されている){

598

0

                         target代表者.setLoginid(mailValue);

599

                     }

600

0

                     if(isパスワード欄が入力されている) {

601

0

                         String pwhash = CalcHash.passowrdHash(passwordValue, target代表者.getLoginid());

602

0

                         target代表者.setPwhash(pwhash);

603

0

                         target代表者.setModpwdate(AppUtils.createNowLong()); // パスワード変更日時

604

                     }

605

606

0

                     if(isメールアドレスが変更されている

607

0

                             && isパスワード欄が入力されている == false) {

608

                         /* 運営管理者によるメールアドレスだけの変更 */

609

0

                         target代表者.setPwhash("");

610

0

                         target代表者.setModpwdate(AppUtils.createNowLong()); // パスワード変更日時

611

                     }

612

0

                     target代表者.setName(adminnameValue);

613

614

0

                     usrDao.update(target代表者, loginUserId); // 更新処理

615

616

                     /* 本人以外がメールアドレスを変更していたらパスワードリセット */

617

0

                     boolean パスワードリセットが必要 = false;

618

0

                     if(isメールアドレスが変更されている) {

619

0

                         if(isSystemAdmin() ) {

620

                             /* パスワード欄が入力できない場合（代表者や運営管理者による変更） */

621

0

                             パスワードリセットが必要 = true;

622

                         }

623

                     }

624

0

                     if(パスワードリセットが必要) {

625

0

                         doパスワードリセット(target代表者.getUsrid(), passwordTicketManager, mailValue);

626

                     }

627

628

                     /* TODO ログインユーザのメールアドレスかパスワードが変更されたら、自動ログアウトさせる */

629

630

                     /*

631

                      * 状態遷移

632

                      */

633

0

                     completeMod = true;

634

635

                     /* 画面コンポーネントを更新する */

636

0

                     target.add(form);

637

0

                 }

638

639

                 @Override

640

                 public boolean isVisible() {

641

                     /* 完了後の状態ならボタンを表示しない */

642

0

                     return completeMod == false && completeDel == false;

643

                 }

644

             };

645

0

             form.add(btnSubmitMod);

646

647

648

             /*

649

              * 【削除する】

650

              */

651

0

             Button btnSubmitDel = new ConfirmAjaxButton("btnSubmitDel") {

652

                 @Override

653

                 String getConfirmMessage() {

654

0

                     return "削除します。";

655

                 }

656

                 @Override

657

                 String getConfirmMessageStrong() {

658

0

                     return "登録情報を削除すると、機関・団体の情報が削除され、所属する会員もすべて退会します。";

659

                 }

660

                 @Override

661

                 void executeAfter(AjaxRequestTarget target) {

662

663

                     /*

664

                      * 運営管理者による機関情報の削除

665

                      * ・所属する会員を退会

666

                      * ・組織を論理削除

667

                      */

668

0

                     Usr cndUser = new Usr();

669

0

                     cndUser.setOrgid(targetOrg.getOrgid());

670

0

                     List<Usr> members = usrDao.get(cndUser);

671

0

                     for(Usr member: members) {

672

0

                         if(Usr.STATUS_退会 != member.getStatus()) {

673

0

                             member.退会処理();

674

0

                             usrDao.update(member, loginUserId); // 更新処理

675

                         }

676

                     }

677

                     /* 外部APIに退会者のログインIDを通知 */

678

0

                     AppUtils.callDeleteNotice(members);

679

680

0

                     orgDao.removeLogical(targetOrg, loginUserId); // 論理削除

681

682

                     /* 状態遷移 */

683

0

                     completeDel = true;

684

685

                     /* 画面コンポーネントを更新する */

686

0

                     target.add(form);

687

0

                 }

688

                 @Override

689

                 public boolean isVisible() {

690

                     /* 運営管理者以外には表示しない */

691

0

                     if(isSystemAdmin() == false) {

692

0

                         return false;

693

                     }

694

0

                     if(targetOrg.getKind().equals(Org.KIND_運営管理)) {

695

                         /* 組織「運営管理」は削除しない */

696

0

                         return false;

697

                     }

698

                     /* 完了後の状態ならボタンを表示しない */

699

0

                     return completeMod == false && completeDel == false;

700

                 }

701

             };

702

0

             form.add(btnSubmitDel);

703

0

         }

704

705

706

         /**

707

          * 利用期間の日付ドロップダウンが変更された時の振る舞い

708

          */

709

         private class DateDropDownOnchangeBehavior extends AjaxFormComponentUpdatingBehavior {

710

             private final Label quickMsgFromto;

711

0

             private DateDropDownOnchangeBehavior(Label quickMsgFromto) {

712

0

                 super("onchange");

713

0

                 this.quickMsgFromto = quickMsgFromto;

714

0

             }

715

             @Override

716

             protected void onUpdate(AjaxRequestTarget target) {

717

0

                 target.add(quickMsgFromto);

718

0

             }

719

         }

720

     }