7 * LICENSE: This source file is licensed under the terms of the GNU General Public License.
9 * @package Magic3 Framework
10 * @author 平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
11 * @copyright Copyright 2006-2012 Magic3 Project.
12 * @license http://www.gnu.org/copyleft/gpl.html GPL License
13 * @version SVN: $Id: ec_mainMemberinfoWidgetContainer.php 5440 2012-12-08 09:37:39Z fishbone $
14 * @link http://www.magic3.org
16 require_once($gEnvManager->getCurrentWidgetContainerPath() . '/ec_mainBaseWidgetContainer.php');
17 require_once($gEnvManager->getCurrentWidgetDbPath() . '/ec_mainMemberDb.php');
18 require_once($gEnvManager->getCurrentWidgetDbPath() . '/ec_mainOrderDb.php');
20 class ec_mainMemberinfoWidgetContainer extends ec_mainBaseWidgetContainer
22 private $db; // DB接続オブジェクト
23 private $orderDb; // DB接続オブジェクト
24 private $state; // 都道府県
25 private $genderArray; // 性別選択メニュー用
26 private $gender; // 性別
27 private $year; // 生年月日(年)
28 private $month; // 生年月日(月)
29 private $day; // 生年月日(日)
30 private $ecMailObj; // メール連携オブジェクト
31 const MAIL_OBJ_ID = 'ecmail';
32 const PERSON_INFO_OPT_SPORTS = 'sports'; // 個人情報オプション(現在やっているスポーツ)
37 function __construct()
40 parent::__construct();
43 $this->db = new ec_mainMemberDb();
44 $this->orderDb = new ec_mainOrderDb();
47 $this->ecMailObj = $this->gInstance->getObject(self::MAIL_OBJ_ID);
50 $this->genderArray = array( array( 'name' => '男', 'value' => '1'),
51 array( 'name' => '女', 'value' => '2'));
56 * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。
57 * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。
59 * @param RequestManager $request HTTPリクエスト処理クラス
60 * @param object $param 任意使用パラメータ。そのまま_assign()に渡る
61 * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。
63 function _setTemplate($request, &$param)
65 return 'memberinfo.tmpl.html';
70 * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。
72 * @param RequestManager $request HTTPリクエスト処理クラス
73 * @param object $param 任意使用パラメータ。_setTemplate()と共有。
76 function _assign($request, &$param)
78 $now = date("Y/m/d H:i:s"); // 現在日時
79 $countryId = photo_shopCommonDef::DEFAULT_COUNTRY_ID; // デフォルト国ID
81 $firstname = $request->trimValueOf('item_firstname'); // 名前(名)
82 $familyname = $request->trimValueOf('item_familyname'); // 名前(姓)
83 $firstnameKana = $request->trimValueOf('item_firstname_kana'); // 名前カナ(名)
84 $familynameKana = $request->trimValueOf('item_familyname_kana'); // 名前カナ(姓)
85 $zipcode = $request->trimValueOf('item_zipcode'); // 郵便番号
86 $this->state = $request->trimValueOf('item_state'); // 都道府県
87 $address = $request->trimValueOf('item_address'); // 住所1
88 $address2 = $request->trimValueOf('item_address2'); // 住所2
89 $phone = $request->trimValueOf('item_phone'); // 電話番号
90 $fax = $request->trimValueOf('item_fax'); // FAX
91 $email = $request->trimValueOf('item_email'); // Email
92 $email2 = $request->trimValueOf('item_email2'); // Email確認用
93 $oldemail = $request->trimValueOf('oldemail'); // 旧Email
94 $act = $request->trimValueOf('act');
97 if (photo_shopCommonDef::MEMBER_INFO_OPTION){
98 $this->gender = $request->trimValueOf('item_gender'); // 性別
99 $this->year = $request->trimValueOf('item_year'); // 生年月日(年)
100 $this->month = $request->trimValueOf('item_month'); // 生年月日(月)
101 $this->day = $request->trimValueOf('item_day'); // 生年月日(日)
102 $sports = $request->trimValueOf('item_sports'); // 現在やってるスポーツ
105 $replaceNew = false; // データを再取得するかどうか
106 if ($act == 'update'){ // 会員情報更新
107 $this->checkInput($familyname, '名前(姓)');
108 $this->checkInput($firstname, '名前(名)');
109 $this->checkInput($familynameKana, '名前カナ(姓)');
110 $this->checkInput($firstnameKana, '名前カナ(名)');
113 /* if ($this->_getConfig(photo_shopCommonDef::CF_USE_MEMBER_ADDRESS)){ // 住所登録が必要なとき
114 $this->checkSingleByte($zipcode, '郵便番号');
115 $this->checkNumeric($this->state, '都道府県');
116 $this->checkInput($address, '住所');
117 $this->checkSingleByte($phone, '電話番号');
118 if (!empty($fax)) $this->checkSingleByte($fax, 'FAX');// 空のときはチェックしない
121 $this->checkMailAddress($email, 'Eメール');
122 $this->checkMailAddress($email2, 'Eメール(確認)');
123 $isEmailChange = false; // Eメールアドレスの変更の必要あるかどうか
124 if ($this->getMsgCount() == 0){ // メールアドレスのチェック
125 if ($email != $email2){
126 $this->setAppErrorMsg('Eメールアドレスに誤りがあります');
127 } else if ($email != $oldemail){ // Eメールに変更があるとき
128 $isEmailChange = true;// Eメールアドレスの変更の必要あり
129 if ($this->_db->isExistsAccount($email)){// 新しいメールアドレスがログインIDとして既に登録されているかチェック
130 $this->setAppErrorMsg('このEメールアドレスは既に登録されています');
136 if (photo_shopCommonDef::MEMBER_INFO_OPTION){
137 $this->checkInput($this->gender, '性別');
138 if (empty($this->year) || empty($this->month) || empty($this->day)) $this->setUserErrorMsg('生年月日が入力されていません');
139 $this->checkInput($sports, '現在やっているスポーツ');
143 if ($this->getMsgCount() == 0){
145 $this->db->startTransaction();
149 $ret = $this->orderDb->getMember($this->_userId, $memberRow);
151 if ($memberRow['sm_type'] == 1){ // 個人メンバーのとき
152 $memberSerialNo = $memberRow['sm_serial'];
155 if ($ret) $ret = $this->db->getMemberBySerial(0/*正会員*/, $memberSerialNo, $row);
157 $personId = $row['sm_person_info_id'];
158 $loginUserId = $row['sm_login_user_id'];
159 $memberNo = $row['sm_member_no'];// 会員番号は変更しない
160 $ret = $this->db->getPersonInfo($personId, $row, $personOptions);
162 $addressId = $row['pi_address_id'];
163 //$email = $row['pi_email'];
166 // $gender = $row['pi_gender'];
167 // $birthday = $row['pi_birthday'];
168 $mobile = $row['pi_mobile'];
172 if ($ret) $ret = $this->db->updateAddress($addressId, $this->_langId, '', $zipcode, $this->state, $address, $address2, $phone, $fax, $countryId, $this->_userId, $now, $addressId);
175 $personOptions = array();
176 if (photo_shopCommonDef::MEMBER_INFO_OPTION){
177 $personOptions[self::PERSON_INFO_OPT_SPORTS] = $sports;
178 $birthday = $this->convertToProperDate($this->year . '/' . $this->month . '/' . $this->day);
180 $birthday = $this->gEnv->getInitValueOfDate();
183 if ($ret) $ret = $this->db->updatePersonInfo($personId, $this->_langId, $firstname, $familyname, $firstnameKana, $familynameKana, $this->gender, $birthday, $email, $mobile, $addressId, $this->_userId, $now, $personalInfoId, $personOptions);
186 if ($ret) $ret = $this->db->updateMember($memberSerialNo, $this->_langId, 1/* 個人 */, 0/* 法人情報ID */, $personalInfoId, $memberNo, $loginUserId, $this->_userId, $now, $newSerial);
188 // ### ログインユーザ名を更新 ###
190 $fieldArray = array();
191 $fieldArray['lu_name'] = $familyname . $firstname; // 名前を更新
192 if ($isEmailChange) $fieldArray['lu_account'] = $email; // Eメールアドレスの変更の必要があるときは変更
193 $ret = $this->_db->updateLoginUserByField($this->_userId/*ログイン中のユーザ*/, $fieldArray, $newSerial);
197 $ret = $this->db->endTransaction();
199 $this->setGuidanceMsg('データを更新しました');
201 // ######## 会員登録のメールをイントラネット側に送信 ########
202 //$this->ecMailObj->sendMemberInfoToBackoffice(1/*更新*/, $this->_userId);
204 $replaceNew = true; // 会員情報を再取得
206 $this->setAppErrorMsg('データ更新に失敗しました');
210 $replaceNew = true; // 会員情報を再取得
212 if ($replaceNew){ // 会員情報を取得のとき
214 $ret = $this->orderDb->getMember($this->_userId, $memberRow);
216 if ($memberRow['sm_type'] == 1){ // 個人メンバーのとき
218 $ret = $this->db->getPersonInfo($memberRow['sm_person_info_id'], $personRow, $personOptions);
220 $ret = $this->orderDb->getAddress($personRow['pi_address_id'], $addressRow);
222 $firstname = $personRow['pi_first_name'];
223 $familyname = $personRow['pi_family_name'];
224 $firstnameKana = $personRow['pi_first_name_kana'];
225 $familynameKana = $personRow['pi_family_name_kana'];
226 $name = $personRow['pi_family_name'] . $personRow['pi_first_name'];
227 $nameKana = $personRow['pi_family_name_kana'] . $personRow['pi_first_name_kana'];
229 $email = $personRow['pi_email'];
230 $email2 = $personRow['pi_email'];
231 $oldemail = $personRow['pi_email'];
232 $zipcode = $addressRow['ad_zipcode'];
233 $address = $addressRow['ad_address1'];
234 $address2 = $addressRow['ad_address2'];
235 $phone = $addressRow['ad_phone'];
236 $fax = $addressRow['ad_fax']; // FAX
237 $this->state = $addressRow['ad_state_id'];
240 if (photo_shopCommonDef::MEMBER_INFO_OPTION){
241 $this->gender = $personRow['pi_gender'];
242 $this->timestampToYearMonthDay($personRow['pi_birthday'], $this->year, $this->month, $this->day);
243 $sports = $personOptions[self::PERSON_INFO_OPT_SPORTS];
249 $this->setAppErrorMsg('このユーザはお買い物会員ではありません');
252 // ##### フォトギャラリー追加分 #####
253 if (photo_shopCommonDef::MEMBER_INFO_OPTION){
254 $this->tmpl->setAttribute('show_member_info_option', 'visibility', 'visible');
257 $this->createGenderMenu();
260 $this->createBirthMenu();
264 if ($this->_getConfig(photo_shopCommonDef::CF_USE_MEMBER_ADDRESS)) $this->tmpl->setAttribute('input_address', 'visibility', 'visible');
267 $this->tmpl->addVar("_widget", "firstname", $firstname);
268 $this->tmpl->addVar("_widget", "familyname", $familyname);
269 $this->tmpl->addVar("_widget", "firstname_kana", $firstnameKana);
270 $this->tmpl->addVar("_widget", "familyname_kana", $familynameKana);
271 $this->tmpl->addVar("_widget", "email", $email);
272 $this->tmpl->addVar("_widget", "email2", $email2);
273 $this->tmpl->addVar("_widget", "old_email", $oldemail);
274 if ($this->_getConfig(photo_shopCommonDef::CF_USE_MEMBER_ADDRESS)){ // 住所登録が必要なとき
275 $this->tmpl->addVar("input_address", "zipcode", $zipcode);
276 $this->tmpl->addVar("input_address", "address", $address);
277 $this->tmpl->addVar("input_address", "address2", $address2);
278 $this->tmpl->addVar("input_address", "phone", $phone);
279 $this->tmpl->addVar("input_address", "fax", $fax);
282 $this->db->getAllState('JPN', $this->_langId, array($this, 'stateLoop'));
285 if (photo_shopCommonDef::MEMBER_INFO_OPTION){
286 $this->tmpl->addVar("show_member_info_option", "sports", $sports); // 現在やっているスポーツ
290 $this->tmpl->addVar("_widget", "regist_url", $this->getUrl($this->gEnv->createCurrentPageUrl() . '&task=memberinfo', true)); // 会員登録用URL
291 $this->tmpl->addVar("_widget", "cancel_url", $this->getUrl($this->gEnv->createCurrentPageUrl(), true)); // キャンセル用URL
294 * 取得した都道府県をテンプレートに設定する
296 * @param int $index 行番号(0~)
297 * @param array $fetchedRow フェッチ取得した行
298 * @param object $param 未使用
299 * @return bool true=処理続行の場合、false=処理終了の場合
301 function stateLoop($index, $fetchedRow, $param)
304 if ($fetchedRow['gz_id'] == $this->state){ // 選択中の都道府県
305 $selected = 'selected';
309 'value' => $this->convertToDispString($fetchedRow['gz_id']), // ID
310 'name' => $this->convertToDispString($fetchedRow['gz_name']), // 表示名
311 'selected' => $selected // 選択中かどうか
313 $this->tmpl->addVars('state_list', $row);
314 $this->tmpl->parseTemplate('state_list', 'a');
322 function createGenderMenu()
324 for ($i = 0; $i < count($this->genderArray); $i++){
325 $value = $this->genderArray[$i]['value'];
326 $name = $this->genderArray[$i]['name'];
329 if ($value == $this->gender) $selected = 'selected';
332 'value' => $value, // ページID
333 'name' => $name, // ページ名
334 'selected' => $selected // 選択中かどうか
336 $this->tmpl->addVars('gender_list', $row);
337 $this->tmpl->parseTemplate('gender_list', 'a');
345 function createBirthMenu()
347 $nowYear = date("Y"); // 現在年
348 $startYear = $nowYear - 100;
349 for ($i = $startYear; $i < $nowYear; $i++){
353 if ($value == $this->year) $selected = 'selected';
356 'value' => $value, // 値
357 'name' => $name, // 表示タイトル
358 'selected' => $selected // 選択中かどうか
360 $this->tmpl->addVars('year_list', $row);
361 $this->tmpl->parseTemplate('year_list', 'a');
364 for ($i = 1; $i <= 12; $i++){
368 if ($value == $this->month) $selected = 'selected';
371 'value' => $value, // 値
372 'name' => $name, // 表示タイトル
373 'selected' => $selected // 選択中かどうか
375 $this->tmpl->addVars('month_list', $row);
376 $this->tmpl->parseTemplate('month_list', 'a');
379 for ($i = 1; $i <= 31; $i++){
383 if ($value == $this->day) $selected = 'selected';
386 'value' => $value, // 値
387 'name' => $name, // 表示タイトル
388 'selected' => $selected // 選択中かどうか
390 $this->tmpl->addVars('day_list', $row);
391 $this->tmpl->parseTemplate('day_list', 'a');