OSDN Git Service

初回コミット(v2.6.17.1)
[magic3/magic3.git] / widgets / ec_main / include / container / ec_mainMemberinfoWidgetContainer.php
1 <?php
2 /**
3  * index.php用コンテナクラス
4  *
5  * PHP versions 5
6  *
7  * LICENSE: This source file is licensed under the terms of the GNU General Public License.
8  *
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
15  */
16 require_once($gEnvManager->getCurrentWidgetContainerPath() .    '/ec_mainBaseWidgetContainer.php');
17 require_once($gEnvManager->getCurrentWidgetDbPath() . '/ec_mainMemberDb.php');
18 require_once($gEnvManager->getCurrentWidgetDbPath() . '/ec_mainOrderDb.php');
19
20 class ec_mainMemberinfoWidgetContainer extends ec_mainBaseWidgetContainer
21 {
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';                // 個人情報オプション(現在やっているスポーツ)
33         
34         /**
35          * コンストラクタ
36          */
37         function __construct()
38         {
39                 // 親クラスを呼び出す
40                 parent::__construct();
41                 
42                 // DB接続オブジェクト作成
43                 $this->db = new ec_mainMemberDb();
44                 $this->orderDb = new ec_mainOrderDb();
45                 
46                 // メール連携オブジェクト取得
47                 $this->ecMailObj = $this->gInstance->getObject(self::MAIL_OBJ_ID);
48                 
49                 // 性別選択メニュー項目
50                 $this->genderArray = array(     array(  'name' => '男',        'value' => '1'),
51                                                                         array(  'name' => '女',        'value' => '2'));
52         }
53         /**
54          * テンプレートファイルを設定
55          *
56          * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。
57          * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。
58          *
59          * @param RequestManager $request               HTTPリクエスト処理クラス
60          * @param object         $param                 任意使用パラメータ。そのまま_assign()に渡る
61          * @return string                                               テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。
62          */
63         function _setTemplate($request, &$param)
64         {       
65                 return 'memberinfo.tmpl.html';
66         }
67         /**
68          * テンプレートにデータ埋め込む
69          *
70          * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。
71          *
72          * @param RequestManager $request               HTTPリクエスト処理クラス
73          * @param object         $param                 任意使用パラメータ。_setTemplate()と共有。
74          * @param                                                               なし
75          */
76         function _assign($request, &$param)
77         {
78                 $now = date("Y/m/d H:i:s");     // 現在日時
79                 $countryId = photo_shopCommonDef::DEFAULT_COUNTRY_ID;                   // デフォルト国ID
80                                 
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');
95                 
96                 // フォトギャラリー追加分
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');                 // 現在やってるスポーツ
103                 }
104                 
105                 $replaceNew = false;            // データを再取得するかどうか
106                 if ($act == 'update'){                  // 会員情報更新
107                         $this->checkInput($familyname, '名前(姓)');
108                         $this->checkInput($firstname, '名前(名)');
109                         $this->checkInput($familynameKana, '名前カナ(姓)');
110                         $this->checkInput($firstnameKana, '名前カナ(名)');
111                         
112                         // 住所登録が必要なとき追加分
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');// 空のときはチェックしない
119                         }*/
120                         
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メールアドレスは既に登録されています');
131                                         }
132                                 }
133                         }
134                         
135                         // フォトギャラリー追加分
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, '現在やっているスポーツ');
140                         }
141                         
142                         // エラーなしの場合は、更新
143                         if ($this->getMsgCount() == 0){
144                                 // トランザクションスタート
145                                 $this->db->startTransaction();
146
147                                 // 登録済み会員情報を取得
148                                 $memberSerialNo = 0;
149                                 $ret = $this->orderDb->getMember($this->_userId, $memberRow);
150                                 if ($ret){
151                                         if ($memberRow['sm_type'] == 1){                // 個人メンバーのとき
152                                                 $memberSerialNo = $memberRow['sm_serial'];
153                                         }
154                                 }
155                                 if ($ret) $ret = $this->db->getMemberBySerial(0/*正会員*/, $memberSerialNo, $row);
156                                 if ($ret){
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);
161                                         if ($ret){
162                                                 $addressId = $row['pi_address_id'];
163                                                 //$email = $row['pi_email'];
164                                                 
165                                                 // 変更しない値を取得
166 //                                              $gender         = $row['pi_gender'];
167 //                                              $birthday       = $row['pi_birthday'];
168                                                 $mobile         = $row['pi_mobile'];
169                                         }
170                                 }
171                                 // 住所登録
172                                 if ($ret) $ret = $this->db->updateAddress($addressId, $this->_langId, '', $zipcode, $this->state, $address, $address2, $phone, $fax, $countryId, $this->_userId, $now, $addressId);
173
174                                 // 個人情報登録
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);
179                                 } else {
180                                         $birthday = $this->gEnv->getInitValueOfDate();
181                                         $this->gender = 0;
182                                 }
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);
184
185                                 // 会員情報更新
186                                 if ($ret) $ret = $this->db->updateMember($memberSerialNo, $this->_langId, 1/* 個人 */, 0/* 法人情報ID */, $personalInfoId, $memberNo, $loginUserId, $this->_userId, $now, $newSerial);
187                         
188                                 // ### ログインユーザ名を更新 ###
189                                 if ($ret){
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);
194                                 }
195                                                                                                         
196                                 // トランザクション終了
197                                 $ret = $this->db->endTransaction();
198                                 if ($ret){
199                                         $this->setGuidanceMsg('データを更新しました');
200                                         
201                                         // ######## 会員登録のメールをイントラネット側に送信 ########
202                                         //$this->ecMailObj->sendMemberInfoToBackoffice(1/*更新*/, $this->_userId);
203                                         
204                                         $replaceNew = true;                     // 会員情報を再取得
205                                 } else {
206                                         $this->setAppErrorMsg('データ更新に失敗しました');
207                                 }
208                         }
209                 } else {                // 初期状態のとき
210                         $replaceNew = true;                     // 会員情報を再取得
211                 }
212                 if ($replaceNew){               // 会員情報を取得のとき
213                         // 会員情報を取得
214                         $ret = $this->orderDb->getMember($this->_userId, $memberRow);
215                         if ($ret){
216                                 if ($memberRow['sm_type'] == 1){                // 個人メンバーのとき
217                                         // 個人情報取得
218                                         $ret = $this->db->getPersonInfo($memberRow['sm_person_info_id'], $personRow, $personOptions);
219                                         if ($ret){
220                                                 $ret = $this->orderDb->getAddress($personRow['pi_address_id'], $addressRow);
221                                                 if ($ret){
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'];
228                                                         
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'];
238                                                         
239                                                         // フォトギャラリー追加分
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];
244                                                         }
245                                                 }
246                                         }
247                                 }
248                         } else {
249                                 $this->setAppErrorMsg('このユーザはお買い物会員ではありません');
250                         }
251                 }
252                 // ##### フォトギャラリー追加分 #####
253                 if (photo_shopCommonDef::MEMBER_INFO_OPTION){
254                         $this->tmpl->setAttribute('show_member_info_option', 'visibility', 'visible');
255                         
256                         // 性別選択メニュー作成
257                         $this->createGenderMenu();
258                 
259                         // 生年月日メニュー作成
260                         $this->createBirthMenu();
261                 }
262                 
263                 // 住所入力エリア表示制御
264                 if ($this->_getConfig(photo_shopCommonDef::CF_USE_MEMBER_ADDRESS)) $this->tmpl->setAttribute('input_address', 'visibility', 'visible');
265                 
266                 // 入力値を戻す
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);
280                         
281                         // 都道府県を設定
282                         $this->db->getAllState('JPN', $this->_langId, array($this, 'stateLoop'));
283                 }
284                 // フォトギャラリー追加分
285                 if (photo_shopCommonDef::MEMBER_INFO_OPTION){
286                         $this->tmpl->addVar("show_member_info_option", "sports", $sports);              // 現在やっているスポーツ
287                 }
288                 
289                 // 遷移先を設定
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
292         }
293         /**
294          * 取得した都道府県をテンプレートに設定する
295          *
296          * @param int $index                    行番号(0~)
297          * @param array $fetchedRow             フェッチ取得した行
298          * @param object $param                 未使用
299          * @return bool                                 true=処理続行の場合、false=処理終了の場合
300          */
301         function stateLoop($index, $fetchedRow, $param)
302         {
303                 $selected = '';
304                 if ($fetchedRow['gz_id'] == $this->state){              // 選択中の都道府県
305                         $selected = 'selected';
306                 }
307
308                 $row = array(
309                         'value'    => $this->convertToDispString($fetchedRow['gz_id']),                 // ID
310                         'name'     => $this->convertToDispString($fetchedRow['gz_name']),                       // 表示名
311                         'selected' => $selected                                                                                                         // 選択中かどうか
312                 );
313                 $this->tmpl->addVars('state_list', $row);
314                 $this->tmpl->parseTemplate('state_list', 'a');
315                 return true;
316         }
317         /**
318          * 性別選択メニュー作成
319          *
320          * @return なし
321          */
322         function createGenderMenu()
323         {
324                 for ($i = 0; $i < count($this->genderArray); $i++){
325                         $value = $this->genderArray[$i]['value'];
326                         $name = $this->genderArray[$i]['name'];
327                         
328                         $selected = '';
329                         if ($value == $this->gender) $selected = 'selected';
330                         
331                         $row = array(
332                                 'value'    => $value,                   // ページID
333                                 'name'     => $name,                    // ページ名
334                                 'selected' => $selected                                                                                                         // 選択中かどうか
335                         );
336                         $this->tmpl->addVars('gender_list', $row);
337                         $this->tmpl->parseTemplate('gender_list', 'a');
338                 }
339         }
340         /**
341          * 生年月日メニュー作成
342          *
343          * @return なし
344          */
345         function createBirthMenu()
346         {
347                 $nowYear = date("Y");   // 現在年
348                 $startYear = $nowYear - 100;
349                 for ($i = $startYear; $i < $nowYear; $i++){
350                         $value = $name = $i;
351                         
352                         $selected = '';
353                         if ($value == $this->year) $selected = 'selected';
354                         
355                         $row = array(
356                                 'value'    => $value,                   // 値
357                                 'name'     => $name,                    // 表示タイトル
358                                 'selected' => $selected                                                                                                         // 選択中かどうか
359                         );
360                         $this->tmpl->addVars('year_list', $row);
361                         $this->tmpl->parseTemplate('year_list', 'a');
362                 }
363                 
364                 for ($i = 1; $i <= 12; $i++){
365                         $value = $name = $i;
366                         
367                         $selected = '';
368                         if ($value == $this->month) $selected = 'selected';
369                         
370                         $row = array(
371                                 'value'    => $value,                   // 値
372                                 'name'     => $name,                    // 表示タイトル
373                                 'selected' => $selected                                                                                                         // 選択中かどうか
374                         );
375                         $this->tmpl->addVars('month_list', $row);
376                         $this->tmpl->parseTemplate('month_list', 'a');
377                 }
378                 
379                 for ($i = 1; $i <= 31; $i++){
380                         $value = $name = $i;
381                         
382                         $selected = '';
383                         if ($value == $this->day) $selected = 'selected';
384                         
385                         $row = array(
386                                 'value'    => $value,                   // 値
387                                 'name'     => $name,                    // 表示タイトル
388                                 'selected' => $selected                                                                                                         // 選択中かどうか
389                         );
390                         $this->tmpl->addVars('day_list', $row);
391                         $this->tmpl->parseTemplate('day_list', 'a');
392                 }
393         }
394 }
395 ?>