1 | <?php |
---|
2 | /* |
---|
3 | * This file is part of EC-CUBE |
---|
4 | * |
---|
5 | * Copyright(c) 2000-2010 LOCKON CO.,LTD. All Rights Reserved. |
---|
6 | * |
---|
7 | * http://www.lockon.co.jp/ |
---|
8 | * |
---|
9 | * This program is free software; you can redistribute it and/or |
---|
10 | * modify it under the terms of the GNU General Public License |
---|
11 | * as published by the Free Software Foundation; either version 2 |
---|
12 | * of the License, or (at your option) any later version. |
---|
13 | * |
---|
14 | * This program is distributed in the hope that it will be useful, |
---|
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
17 | * GNU General Public License for more details. |
---|
18 | * |
---|
19 | * You should have received a copy of the GNU General Public License |
---|
20 | * along with this program; if not, write to the Free Software |
---|
21 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
---|
22 | */ |
---|
23 | |
---|
24 | // {{{ requires |
---|
25 | require_once(CLASS_REALDIR . "pages/admin/LC_Page_Admin.php"); |
---|
26 | |
---|
27 | /** |
---|
28 | * 店舗基本情報 のページクラス. |
---|
29 | * |
---|
30 | * @package Page |
---|
31 | * @author LOCKON CO.,LTD. |
---|
32 | * @version $Id$ |
---|
33 | */ |
---|
34 | class LC_Page_Admin_Basis extends LC_Page_Admin { |
---|
35 | |
---|
36 | // }}} |
---|
37 | // {{{ functions |
---|
38 | |
---|
39 | /** |
---|
40 | * Page を初期化する. |
---|
41 | * |
---|
42 | * @return void |
---|
43 | */ |
---|
44 | function init() { |
---|
45 | parent::init(); |
---|
46 | $this->tpl_mainpage = 'basis/index.tpl'; |
---|
47 | $this->tpl_subnavi = 'basis/subnavi.tpl'; |
---|
48 | $this->tpl_subno = 'index'; |
---|
49 | $this->tpl_mainno = 'basis'; |
---|
50 | $masterData = new SC_DB_MasterData_Ex(); |
---|
51 | $this->arrPref = $masterData->getMasterData('mtb_pref'); |
---|
52 | $this->arrTAXRULE = $masterData->getMasterData("mtb_taxrule"); |
---|
53 | $this->tpl_subtitle = 'SHOPマスタ'; |
---|
54 | $this->tpl_enable_ssl = FALSE; |
---|
55 | if(strpos(HTTPS_URL,"https://") !== FALSE){ |
---|
56 | $this->tpl_enable_ssl = TRUE; |
---|
57 | } |
---|
58 | |
---|
59 | //定休日用配列 |
---|
60 | $this->arrRegularHoliday[0] = '日'; |
---|
61 | $this->arrRegularHoliday[1] = '月'; |
---|
62 | $this->arrRegularHoliday[2] = '火'; |
---|
63 | $this->arrRegularHoliday[3] = '水'; |
---|
64 | $this->arrRegularHoliday[4] = '木'; |
---|
65 | $this->arrRegularHoliday[5] = '金'; |
---|
66 | $this->arrRegularHoliday[6] = '土'; |
---|
67 | } |
---|
68 | |
---|
69 | /** |
---|
70 | * Page のプロセス. |
---|
71 | * |
---|
72 | * @return void |
---|
73 | */ |
---|
74 | function process() { |
---|
75 | $this->action(); |
---|
76 | $this->sendResponse(); |
---|
77 | } |
---|
78 | |
---|
79 | /** |
---|
80 | * Page のアクション. |
---|
81 | * |
---|
82 | * @return void |
---|
83 | */ |
---|
84 | function action() { |
---|
85 | $objSess = new SC_Session(); |
---|
86 | $objQuery = new SC_Query(); |
---|
87 | |
---|
88 | // 認証可否の判定 |
---|
89 | SC_Utils_Ex::sfIsSuccess($objSess); |
---|
90 | |
---|
91 | $cnt = $objQuery->count("dtb_baseinfo"); |
---|
92 | |
---|
93 | if ($cnt > 0) { |
---|
94 | $this->tpl_mode = "update"; |
---|
95 | } else { |
---|
96 | $this->tpl_mode = "insert"; |
---|
97 | } |
---|
98 | |
---|
99 | if(isset($_POST['mode']) && !empty($_POST["mode"])) { |
---|
100 | // POSTデータの引き継ぎ |
---|
101 | $this->arrForm = $_POST; |
---|
102 | |
---|
103 | // 入力データの変換 |
---|
104 | $this->arrForm = $this->lfConvertParam($this->arrForm); |
---|
105 | $this->arrForm['regular_holiday_ids'] = $_POST['regular_holiday_ids']; // 定休日情報を付加 |
---|
106 | // 入力データのエラーチェック |
---|
107 | $this->arrErr = $this->lfErrorCheck($this->arrForm); |
---|
108 | |
---|
109 | if(count($this->arrErr) == 0) { |
---|
110 | switch($_POST['mode']) { |
---|
111 | case 'update': |
---|
112 | $this->lfUpdateData($this->arrForm); // 既存編集 |
---|
113 | break; |
---|
114 | case 'insert': |
---|
115 | $this->lfInsertData($this->arrForm); // 新規作成 |
---|
116 | break; |
---|
117 | default: |
---|
118 | break; |
---|
119 | } |
---|
120 | $this->tpl_onload = "fnCheckLimit('downloadable_days', 'downloadable_days_unlimited', '" . DISABLED_RGB . "'); window.alert('SHOPマスタの登録が完了しました。管理機能のURLを変更した場合は、新しいURLにアクセスしてください。');"; |
---|
121 | } |
---|
122 | if( empty($this->arrForm['regular_holiday_ids']) ) { |
---|
123 | $this->arrSel = array(); |
---|
124 | } else { |
---|
125 | $this->arrSel = $this->arrForm['regular_holiday_ids']; |
---|
126 | } |
---|
127 | } else { |
---|
128 | $arrCol = $this->lfGetCol(); |
---|
129 | $col = SC_Utils_Ex::sfGetCommaList($arrCol); |
---|
130 | $arrRet = $objQuery->select($col, "dtb_baseinfo"); |
---|
131 | $this->arrForm = $arrRet[0]; |
---|
132 | |
---|
133 | $regular_holiday_ids = explode('|', $this->arrForm['regular_holiday_ids']); |
---|
134 | $this->arrForm['regular_holiday_ids'] = $regular_holiday_ids; |
---|
135 | $admin_dir = str_replace("/","",ADMIN_DIR); |
---|
136 | $this->arrForm += array("admin_dir"=>$admin_dir); |
---|
137 | $this->arrForm += array("admin_force_ssl"=>ADMIN_FORCE_SSL); |
---|
138 | if(defined("ADMIN_ALLOW_HOSTS")){ |
---|
139 | $allow_hosts = unserialize(ADMIN_ALLOW_HOSTS); |
---|
140 | $this->arrForm += array("admin_allow_hosts"=>implode("\n",$allow_hosts)); |
---|
141 | }else{ |
---|
142 | $this->arrForm += array("admin_allow_hosts"=>""); |
---|
143 | } |
---|
144 | $this->tpl_onload = "fnCheckLimit('downloadable_days', 'downloadable_days_unlimited', '" . DISABLED_RGB . "');"; |
---|
145 | } |
---|
146 | } |
---|
147 | |
---|
148 | /** |
---|
149 | * デストラクタ. |
---|
150 | * |
---|
151 | * @return void |
---|
152 | */ |
---|
153 | function destroy() { |
---|
154 | parent::destroy(); |
---|
155 | } |
---|
156 | |
---|
157 | // 基本情報用のカラムを取り出す。 |
---|
158 | function lfGetCol() { |
---|
159 | $arrCol = array( |
---|
160 | "company_name", |
---|
161 | "company_kana", |
---|
162 | "shop_name", |
---|
163 | "shop_kana", |
---|
164 | "shop_name_eng", |
---|
165 | "zip01", |
---|
166 | "zip02", |
---|
167 | "pref", |
---|
168 | "addr01", |
---|
169 | "addr02", |
---|
170 | "tel01", |
---|
171 | "tel02", |
---|
172 | "tel03", |
---|
173 | "fax01", |
---|
174 | "fax02", |
---|
175 | "fax03", |
---|
176 | "business_hour", |
---|
177 | "email01", |
---|
178 | "email02", |
---|
179 | "email03", |
---|
180 | "email04", |
---|
181 | "tax", |
---|
182 | "tax_rule", |
---|
183 | "free_rule", |
---|
184 | "good_traded", |
---|
185 | "message", |
---|
186 | "regular_holiday_ids", |
---|
187 | "latitude", |
---|
188 | "longitude", |
---|
189 | "downloadable_days", |
---|
190 | "downloadable_days_unlimited" |
---|
191 | ); |
---|
192 | return $arrCol; |
---|
193 | } |
---|
194 | |
---|
195 | function lfUpdateData($array) { |
---|
196 | $objQuery = new SC_Query(); |
---|
197 | $arrCol = $this->lfGetCol(); |
---|
198 | foreach($arrCol as $val) { |
---|
199 | //配列の場合は、パイプ区切りの文字列に変換 |
---|
200 | if(is_array($array[$val])) { |
---|
201 | $sqlval[$val] = implode("|", $array[$val]); |
---|
202 | } else { |
---|
203 | $sqlval[$val] = $array[$val]; |
---|
204 | } |
---|
205 | } |
---|
206 | $sqlval['update_date'] = 'Now()'; |
---|
207 | $this->lfUpdateAdminData($array); |
---|
208 | // UPDATEの実行 |
---|
209 | $ret = $objQuery->update("dtb_baseinfo", $sqlval); |
---|
210 | } |
---|
211 | |
---|
212 | function lfInsertData($array) { |
---|
213 | $objQuery = new SC_Query(); |
---|
214 | $arrCol = $this->lfGetCol(); |
---|
215 | foreach($arrCol as $val) { |
---|
216 | $sqlval[$val] = $array[$val]; |
---|
217 | } |
---|
218 | $sqlval['update_date'] = 'Now()'; |
---|
219 | $this->lfUpdateAdminData($array); |
---|
220 | // INSERTの実行 |
---|
221 | $ret = $objQuery->insert("dtb_baseinfo", $sqlval); |
---|
222 | } |
---|
223 | |
---|
224 | //管理機能ディレクトリのリネームとinstall.phpの変更 |
---|
225 | function lfUpdateAdminData($array){ |
---|
226 | $admin_dir = trim($array['admin_dir'])."/"; |
---|
227 | $admin_force_ssl = "FALSE"; |
---|
228 | if($array['admin_force_ssl'] == 1){ |
---|
229 | $admin_force_ssl = "TRUE"; |
---|
230 | } |
---|
231 | $admin_allow_hosts = explode("\n",$array['admin_allow_hosts']); |
---|
232 | foreach($admin_allow_hosts as $key=>$host){ |
---|
233 | $host = trim($host); |
---|
234 | if(strlen($host) >= 8){ |
---|
235 | $admin_allow_hosts[$key] = $host; |
---|
236 | }else{ |
---|
237 | unset($admin_allow_hosts[$key]); |
---|
238 | } |
---|
239 | } |
---|
240 | $admin_allow_hosts = serialize($admin_allow_hosts); |
---|
241 | |
---|
242 | //権限チェック |
---|
243 | if(!is_writable(DATA_REALDIR . "install.php")){ |
---|
244 | $this->arrErr["admin_force_ssl"] = DATA_REALDIR . "install.phpを変更する権限がありません。"; |
---|
245 | return false; |
---|
246 | } |
---|
247 | |
---|
248 | //install.phpの書き換え |
---|
249 | $installData = file(DATA_REALDIR."install.php",FILE_IGNORE_NEW_LINES); |
---|
250 | $diff = 0; |
---|
251 | foreach($installData as $key=>$line){ |
---|
252 | if(strpos($line,"ADMIN_DIR") !== false and ADMIN_DIR != $admin_dir){ |
---|
253 | //既存ディレクトリのチェック |
---|
254 | if(file_exists(HTML_REALDIR.$admin_dir)){ |
---|
255 | $this->arrErr["admin_dir"] .= HTML_REALDIR.$admin_dir."は既に存在しています。別のディレクトリ名を指定してください。"; |
---|
256 | } |
---|
257 | if(file_exists(USER_TEMPLATE_REALDIR.$admin_dir)){ |
---|
258 | $this->arrErr["admin_dir"] .= USER_TEMPLATE_REALDIR.$admin_dir."は既に存在しています。別のディレクトリ名を指定してください。"; |
---|
259 | } |
---|
260 | //権限チェック |
---|
261 | if(!is_writable(HTML_REALDIR . ADMIN_DIR)){ |
---|
262 | $this->arrErr["admin_dir"] .= URL_PATH.ADMIN_DIR."のディレクトリ名を変更する権限がありません。"; |
---|
263 | } |
---|
264 | if(!is_writable(USER_TEMPLATE_REALDIR . ADMIN_DIR)){ |
---|
265 | $this->arrErr["admin_dir"] .= USER_TEMPLATE_REALDIR . ADMIN_DIR."のディレクトリ名を変更する権限がありません。"; |
---|
266 | } |
---|
267 | if(count($this->arrErr) == 0 ){ |
---|
268 | $installData[$key] = 'define("ADMIN_DIR","'.$admin_dir.'");'; |
---|
269 | //管理機能ディレクトリのリネーム |
---|
270 | rename(HTML_REALDIR.ADMIN_DIR,HTML_REALDIR.$admin_dir); |
---|
271 | rename(USER_TEMPLATE_REALDIR.ADMIN_DIR,USER_TEMPLATE_REALDIR.$admin_dir); |
---|
272 | $diff ++; |
---|
273 | } |
---|
274 | } |
---|
275 | |
---|
276 | if(strpos($line,"ADMIN_FORCE_SSL") !== false and ADMIN_FORCE_SSL !== (boolean)$array['admin_force_ssl']){ |
---|
277 | $installData[$key] = 'define("ADMIN_FORCE_SSL",'.$admin_force_ssl.');'; |
---|
278 | $diff ++; |
---|
279 | } |
---|
280 | if(strpos($line,"ADMIN_ALLOW_HOSTS") !== false and ADMIN_ALLOW_HOSTS != $admin_allow_hosts) { |
---|
281 | $installData[$key] = "define('ADMIN_ALLOW_HOSTS','".$admin_allow_hosts."');"; |
---|
282 | $diff ++; |
---|
283 | } |
---|
284 | } |
---|
285 | |
---|
286 | if($diff > 0) { |
---|
287 | $fp = fopen(DATA_REALDIR . "install.php","wb"); |
---|
288 | $installData = implode("\n",$installData); |
---|
289 | echo $installData; |
---|
290 | fwrite($fp, $installData); |
---|
291 | fclose($fp); |
---|
292 | } |
---|
293 | return true; |
---|
294 | } |
---|
295 | |
---|
296 | /* 取得文字列の変換 */ |
---|
297 | function lfConvertParam($array) { |
---|
298 | /* |
---|
299 | * 文字列の変換 |
---|
300 | * K : 「半角(ハンカク)片仮名」を「全角片仮名」に変換 |
---|
301 | * C : 「全角ひら仮名」を「全角かた仮名」に変換 |
---|
302 | * V : 濁点付きの文字を一文字に変換。"K","H"と共に使用します |
---|
303 | * n : 「全角」数字を「半角(ハンカク)」に変換 |
---|
304 | * a : 全角英数字を半角英数字に変換する |
---|
305 | */ |
---|
306 | // 人物基本情報 |
---|
307 | |
---|
308 | // スポット商品 |
---|
309 | $arrConvList['company_name'] = "KVa"; |
---|
310 | $arrConvList['company_kana'] = "KVC"; |
---|
311 | $arrConvList['shop_name'] = "KVa"; |
---|
312 | $arrConvList['shop_kana'] = "KVC"; |
---|
313 | $arrConvList['shop_name_eng'] = "a"; |
---|
314 | $arrConvList['addr01'] = "KVa"; |
---|
315 | $arrConvList['addr02'] = "KVa"; |
---|
316 | $arrConvList['zip01'] = "n"; |
---|
317 | $arrConvList['zip02'] = "n"; |
---|
318 | $arrConvList['tel01'] = "n"; |
---|
319 | $arrConvList['tel02'] = "n"; |
---|
320 | $arrConvList['tel03'] = "n"; |
---|
321 | $arrConvList['fax01'] = "n"; |
---|
322 | $arrConvList['fax02'] = "n"; |
---|
323 | $arrConvList['fax03'] = "n"; |
---|
324 | $arrConvList['email01'] = "a"; |
---|
325 | $arrConvList['email02'] = "a"; |
---|
326 | $arrConvList['email03'] = "a"; |
---|
327 | $arrConvList['email04'] = "a"; |
---|
328 | $arrConvList['admin_dir'] = "a"; |
---|
329 | $arrConvList['admin_force_ssl'] = "n"; |
---|
330 | $arrConvList['admin_allow_hosts'] = "a"; |
---|
331 | $arrConvList['tax'] = "n"; |
---|
332 | $arrConvList['free_rule'] = "n"; |
---|
333 | $arrConvList['business_hour'] = "KVa"; |
---|
334 | $arrConvList['good_traded'] = ""; |
---|
335 | $arrConvList['message'] = ""; |
---|
336 | $arrConvList['downloadable_days'] = "n"; |
---|
337 | $arrConvList['downloadable_days_unlimited'] = "n"; |
---|
338 | |
---|
339 | return SC_Utils_Ex::mbConvertKanaWithArray($array, $arrConvList); |
---|
340 | } |
---|
341 | |
---|
342 | // 入力エラーチェック |
---|
343 | function lfErrorCheck($array) { |
---|
344 | $objErr = new SC_CheckError($array); |
---|
345 | |
---|
346 | $objErr->doFunc(array("会社名", "company_name", STEXT_LEN), array("MAX_LENGTH_CHECK")); |
---|
347 | $objErr->doFunc(array("会社名(カナ)", "company_kana", STEXT_LEN), array("KANA_CHECK","MAX_LENGTH_CHECK")); |
---|
348 | $objErr->doFunc(array("店名", "shop_name", STEXT_LEN), array("EXIST_CHECK","MAX_LENGTH_CHECK")); |
---|
349 | $objErr->doFunc(array("店名(カナ)", "shop_kana", STEXT_LEN), array("KANA_CHECK","MAX_LENGTH_CHECK")); |
---|
350 | $objErr->doFunc(array("店名(英語表記)", "shop_name_eng", MTEXT_LEN), array("GRAPH_CHECK","MAX_LENGTH_CHECK")); |
---|
351 | // 郵便番号チェック |
---|
352 | $objErr->doFunc(array("郵便番号1","zip01",ZIP01_LEN ) ,array("EXIST_CHECK", "NUM_CHECK","NUM_COUNT_CHECK")); |
---|
353 | $objErr->doFunc(array("郵便番号2","zip02",ZIP02_LEN ) ,array("EXIST_CHECK", "NUM_CHECK","NUM_COUNT_CHECK")); |
---|
354 | $objErr->doFunc(array("郵便番号", "zip01", "zip02"), array("ALL_EXIST_CHECK")); |
---|
355 | // 住所チェック |
---|
356 | $objErr->doFunc(array("都道府県", "pref"), array("EXIST_CHECK")); |
---|
357 | $objErr->doFunc(array("住所1", "addr01", MTEXT_LEN), array("EXIST_CHECK", "MAX_LENGTH_CHECK")); |
---|
358 | $objErr->doFunc(array("住所2", "addr02", MTEXT_LEN), array("EXIST_CHECK", "MAX_LENGTH_CHECK")); |
---|
359 | // メールチェック |
---|
360 | $objErr->doFunc(array('商品注文受付メールアドレス', "email01", STEXT_LEN) ,array("EXIST_CHECK", "EMAIL_CHECK", "EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK")); |
---|
361 | $objErr->doFunc(array('問い合わせ受付メールアドレス', "email02", STEXT_LEN) ,array("EXIST_CHECK", "EMAIL_CHECK", "EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK")); |
---|
362 | $objErr->doFunc(array('メール送信元メールアドレス', "email03", STEXT_LEN) ,array("EXIST_CHECK", "EMAIL_CHECK", "EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK")); |
---|
363 | $objErr->doFunc(array('送信エラー受付メールアドレス', "email04", STEXT_LEN) ,array("EXIST_CHECK", "EMAIL_CHECK", "EMAIL_CHAR_CHECK","MAX_LENGTH_CHECK")); |
---|
364 | //管理機能設定チェック |
---|
365 | $objErr->doFunc(array('ディレクトリ名', "admin_dir", ID_MAX_LEN) ,array("EXIST_CHECK","SPTAB_CHECK", "ALNUM_CHECK")); |
---|
366 | $objErr->doFunc(array('SSL制限', "admin_force_ssl", 1) ,array("NUM_CHECK", "MAX_LENGTH_CHECK")); |
---|
367 | $objErr->doFunc(array('IP制限', "admin_allow_hosts", LTEXT_LEN) ,array("IP_CHECK", "MAX_LENGTH_CHECK")); |
---|
368 | |
---|
369 | |
---|
370 | // 電話番号チェック |
---|
371 | $objErr->doFunc(array("TEL", "tel01", "tel02", "tel03"), array("TEL_CHECK")); |
---|
372 | $objErr->doFunc(array("FAX", "fax01", "fax02", "fax03"), array("TEL_CHECK")); |
---|
373 | // その他 |
---|
374 | $objErr->doFunc(array("消費税率", "tax", PERCENTAGE_LEN), array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); |
---|
375 | $objErr->doFunc(array("送料無料条件", "free_rule", PRICE_LEN), array("NUM_CHECK", "MAX_LENGTH_CHECK")); |
---|
376 | $objErr->doFunc(array("店舗営業時間", "business_hour", STEXT_LEN), array("MAX_LENGTH_CHECK")); |
---|
377 | |
---|
378 | $objErr->doFunc(array("取扱商品", "good_traded", LLTEXT_LEN), array("MAX_LENGTH_CHECK")); |
---|
379 | $objErr->doFunc(array("メッセージ", "message", LLTEXT_LEN), array("MAX_LENGTH_CHECK")); |
---|
380 | if(!isset($array['downloadable_days_unlimited']) && $array['downloadable_days_unlimited'] != "1") { |
---|
381 | $objErr->doFunc(array("ダウンロード可能日数", "downloadable_days", DOWNLOAD_DAYS_LEN), array("EXIST_CHECK", "ZERO_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); |
---|
382 | } |
---|
383 | $objErr->doFunc(array("緯度", "latitude", STEXT_LEN), array("NUM_POINT_CHECK", "MAX_LENGTH_CHECK")); |
---|
384 | $objErr->doFunc(array("経度", "longitude", STEXT_LEN), array("NUM_POINT_CHECK", "MAX_LENGTH_CHECK")); |
---|
385 | return $objErr->arrErr; |
---|
386 | } |
---|
387 | } |
---|
388 | ?> |
---|