/** * * テンプレートの文言をフォームに入れる。 * @param FormParam $objFormParam */ public function changeData(&$objFormParam) { $template_id = $objFormParam->getValue('template_id'); // 未選択時 if (strlen($template_id) === 0) { $mailTemplates = null; // 有効選択時 } elseif (Utils::sfIsInt($template_id)) { /* @var $objMailtemplate MailtemplateHelper */ $objMailtemplate = Application::alias('eccube.helper.mailtemplate'); $mailTemplates = $objMailtemplate->get($template_id); // 不正選択時 } else { trigger_error('テンプレートの指定が不正。', E_USER_ERROR); } if (empty($mailTemplates)) { foreach (array('subject', 'header', 'footer') as $key) { $objFormParam->setValue($key, ''); } } else { $objFormParam->setParam($mailTemplates); } return $objFormParam; }
/** * APIのリクエスト基本パラメーターのチェック * * @param FormParam $objFormParam * @return array $arrErr */ protected function checkParam($objFormParam) { $arrErr = $objFormParam->checkError(); if (!preg_match("/^[a-zA-Z0-9\\-\\_]+\$/", $objFormParam->getValue('Operation')) && !Utils::isBlank($objFormParam->getValue('Operation'))) { $arrErr['ECCUBE.Operation.ParamError'] = 'Operationの値が不正です。'; } if (!preg_match("/^[a-zA-Z0-9\\-\\_]+\$/", $objFormParam->getValue('Service')) && !Utils::isBlank($objFormParam->getValue('Service'))) { $arrErr['ECCUBE.Service.ParamError'] = 'Serviceの値が不正です。'; } if (!preg_match("/^[a-zA-Z0-9\\-\\_]+\$/", $objFormParam->getValue('Style')) && !Utils::isBlank($objFormParam->getValue('Style'))) { $arrErr['ECCUBE.Style.ParamError'] = 'Styleの値が不正です。'; } if (!preg_match("/^[a-zA-Z0-9\\-\\_]+\$/", $objFormParam->getValue('Validate')) && !Utils::isBlank($objFormParam->getValue('Validate'))) { $arrErr['ECCUBE.Validate.ParamError'] = 'Validateの値が不正です。'; } if (!preg_match("/^[a-zA-Z0-9\\-\\_\\.]+\$/", $objFormParam->getValue('Version')) && !Utils::isBlank($objFormParam->getValue('Version'))) { $arrErr['ECCUBE.Version.ParamError'] = 'Versionの値が不正です。'; } return $arrErr; }
/** * カテゴリの表示順序を下へ移動する. * * @param FormParam $objFormParam * @return void */ public function doDown(&$objFormParam) { /* @var $objCategory CategoryHelper */ $objCategory = Application::alias('eccube.helper.category', false); $category_id = $objFormParam->getValue('category_id'); $objCategory->rankDown($category_id); }
/** * @param string $mode * @param boolean $tpl_classcat_find1 * @param boolean $tpl_classcat_find2 */ public function lfCheckError($mode, FormParam &$objFormParam, $tpl_classcat_find1 = null, $tpl_classcat_find2 = null) { switch ($mode) { case 'add_favorite_sphone': case 'add_favorite': /* @var $objCustomer Customer */ $objCustomer = Application::alias('eccube.customer'); /* @var $objErr CheckError */ $objErr = Application::alias('eccube.check_error'); $customer_id = $objCustomer->getValue('customer_id'); $favorite_product_id = $objFormParam->getValue('favorite_product_id'); if (Application::alias('eccube.helper.db')->dataExists('dtb_customer_favorite_products', 'customer_id = ? AND product_id = ?', array($customer_id, $favorite_product_id))) { $objErr->arrErr['add_favorite' . $favorite_product_id] = '※ この商品は既にお気に入りに追加されています。<br />'; } break; default: // 入力データを渡す。 $arrRet = $objFormParam->getHashArray(); /* @var $objErr CheckError */ $objErr = Application::alias('eccube.check_error', $arrRet); $objErr->arrErr = $objFormParam->checkError(); // 複数項目チェック if ($tpl_classcat_find1) { $objErr->doFunc(array('規格1', 'classcategory_id1'), array('EXIST_CHECK')); } if ($tpl_classcat_find2) { $objErr->doFunc(array('規格2', 'classcategory_id2'), array('EXIST_CHECK')); } break; } return $objErr->arrErr; }
/** * 入力内容のチェック * @var FormParam * @param FormParam $objFormParam */ public function lfCheckError(&$objFormParam) { // 入力データを渡す。 $arrParams = $objFormParam->getHashArray(); $arrErr = $objFormParam->checkError(); /* @var $objErr CheckError */ $objError = Application::alias('eccube.check_error', $arrParams); $year = $objFormParam->getValue('year'); if (!is_numeric($year)) { $arrErr['year'] = '発行年は数値で入力してください。'; } $month = $objFormParam->getValue('month'); if (!is_numeric($month)) { $arrErr['month'] = '発行月は数値で入力してください。'; } elseif (0 >= $month && 12 < $month) { $arrErr['month'] = '発行月は1〜12の間で入力してください。'; } $day = $objFormParam->getValue('day'); if (!is_numeric($day)) { $arrErr['day'] = '発行日は数値で入力してください。'; } elseif (0 >= $day && 31 < $day) { $arrErr['day'] = '発行日は1〜31の間で入力してください。'; } $objError->doFunc(array('発行日', 'year', 'month', 'day'), array('CHECK_DATE')); $arrErr = array_merge($arrErr, $objError->arrErr); return $arrErr; }
/** * 表示するファイルにエラーチェックを行う * * @param FormParam $objFormParam FormParam インスタンス * @return boolean $file_check_flg エラーチェックの結果 */ public function checkErrorDispFile($objFormParam) { $file_check_flg = false; // FIXME パスのチェック関数が必要 $file = $objFormParam->getValue('file'); $path_exists = Utils::checkFileExistsWithInBasePath($file, USER_REALDIR); if ($path_exists) { $file_check_flg = true; } return $file_check_flg; }
/** * @param FormParam $objFormParam */ public function lfGetTargetData(&$objFormParam) { $objQuery = Application::alias('eccube.query'); $arrIndexFlag = $objFormParam->getValue('indexflag'); $arrIndexFlagNew = $objFormParam->getValue('indexflag_new'); $arrTableName = $objFormParam->getValue('table_name'); $arrColumnName = $objFormParam->getValue('column_name'); $arrTarget = array(); $message = ''; // 変更されている対象を走査 for ($i = 1; $i <= count($arrIndexFlag); $i++) { //入力値チェック $param = array('indexflag' => $arrIndexFlag[$i], 'indexflag_new' => $arrIndexFlagNew[$i], 'table_name' => $arrTableName[$i], 'column_name' => $arrColumnName[$i]); /* @var $objErr CheckError */ $objErr = Application::alias('eccube.check_error', $param); $objErr->doFunc(array('インデックス(' . $i . ')', 'indexflag', INT_LEN), array('NUM_CHECK')); $objErr->doFunc(array('インデックス変更後(' . $i . ')', 'indexflag_new', INT_LEN), array('NUM_CHECK')); $objErr->doFunc(array('インデックス変更後(' . $i . ')', 'indexflag_new', INT_LEN), array('NUM_CHECK')); $objErr->doFunc(array('テーブル名(' . $i . ')', 'table_name', STEXT_LEN), array('GRAPH_CHECK', 'EXIST_CHECK', 'MAX_LENGTH_CHECK')); $objErr->doFunc(array('カラム名(' . $i . ')', 'column_name', STEXT_LEN), array('GRAPH_CHECK', 'EXIST_CHECK', 'MAX_LENGTH_CHECK')); $arrErr = $objErr->arrErr; if (count($arrErr) != 0) { // 通常の送信ではエラーにならないはずです。 $message = "window.alert('不正なデータがあったため処理を中断しました。');"; return $message; } if ($param['indexflag'] != $param['indexflag_new']) { // 入力値がデータにある対象テーブルかのチェック if ($objQuery->exists('dtb_index_list', 'table_name = ? and column_name = ?', array($param['table_name'], $param['column_name']))) { $arrTarget[] = $param; } } } return $arrTarget; }
/** * DBおよびファイルシステムにテンプレートパッケージを追加する. * * エラーが発生した場合は, エラーを出力し, false を返す. * * @param FormParam $objFormParam FormParamのインスタンス * @param UploadFile $objUpFile UploadFileのインスタンス * @return boolean 成功した場合 true; 失敗した場合 false */ public function doUpload($objFormParam, $objUpFile) { $template_code = $objFormParam->getValue('template_code'); $template_name = $objFormParam->getValue('template_name'); $device_type_id = $objFormParam->getValue('device_type_id'); $template_dir = SMARTY_TEMPLATES_REALDIR . $template_code; $compile_dir = DATA_REALDIR . 'Smarty/templates_c/' . $template_code; $objQuery = Application::alias('eccube.query'); $objQuery->begin(); $arrValues = array('template_code' => $template_code, 'device_type_id' => $device_type_id, 'template_name' => $template_name, 'create_date' => 'CURRENT_TIMESTAMP', 'update_date' => 'CURRENT_TIMESTAMP'); $objQuery->insert('dtb_templates', $arrValues); // フォルダ作成 if (!file_exists($template_dir)) { if (!mkdir($template_dir)) { $this->arrErr['err'] = '※ テンプレートフォルダが作成できませんでした。<br/>'; $objQuery->rollback(); return false; } } if (!file_exists($compile_dir)) { if (!mkdir($compile_dir)) { $this->arrErr['err'] = '※ Smarty コンパイルフォルダが作成できませんでした。<br/>'; $objQuery->rollback(); return false; } } // 一時フォルダから保存ディレクトリへ移動 $objUpFile->moveTempFile(); // 解凍 if (!Application::alias('eccube.helper.file_manager')->unpackFile($template_dir . '/' . $_FILES['template_file']['name'])) { $this->arrErr['err'] = '※ テンプレートファイルの解凍に失敗しました。<br/>'; $objQuery->rollback(); return false; } // ユーザデータの下のファイルをコピーする $from_dir = SMARTY_TEMPLATES_REALDIR . $template_code . '/_packages/'; $to_dir = USER_REALDIR . 'packages/' . $template_code . '/'; if (!Utils::recursiveMkdir($to_dir)) { $this->arrErr['err'] = '※ ' . $to_dir . ' の作成に失敗しました。<br/>'; $objQuery->rollback(); return false; } Utils::sfCopyDir($from_dir, $to_dir); $objQuery->commit(); return true; }
/** * SQL詳細設定情報呼び出し (編集中データがある場合はそれを保持する) * * @param FormParam $objFormParam フォームパラメータークラス * @return mixed 表示用パラメーター */ public function lfGetSqlData(&$objFormParam) { // 編集中データがある場合 if (!Utils::isBlank($objFormParam->getValue('sql_name')) || !Utils::isBlank($objFormParam->getValue('csv_sql'))) { return $objFormParam->getHashArray(); } $sql_id = $objFormParam->getValue('sql_id'); if (!Utils::isBlank($sql_id)) { $arrData = $this->lfGetSqlList('sql_id = ?', array($sql_id)); return $arrData[0]; } return array(); }
/** * @param FormParam $objFormParam */ public function lfCheckError(&$objFormParam) { $objFormParam->convParam(); /* @var $objErr CheckError */ $objErr = Application::alias('eccube.check_error', $objFormParam->getHashArray()); $objErr->arrErr = $objFormParam->checkError(); // 特殊項目チェック // 月度集計 if ($objFormParam->getValue('search_form') == 1) { $objErr->doFunc(array('月度', 'search_startyear_m', 'search_startmonth_m'), array('FULL_EXIST_CHECK')); } // 期間集計 if ($objFormParam->getValue('search_form') == 2) { $objErr->doFunc(array('期間(開始日)', 'search_startyear', 'search_startmonth', 'search_startday'), array('FULL_EXIST_CHECK')); $objErr->doFunc(array('期間(終了日)', 'search_endyear', 'search_endmonth', 'search_endday'), array('FULL_EXIST_CHECK')); $objErr->doFunc(array('期間(開始日)', 'search_startyear', 'search_startmonth', 'search_startday'), array('CHECK_DATE')); $objErr->doFunc(array('期間(終了日)', 'search_endyear', 'search_endmonth', 'search_endday'), array('CHECK_DATE')); $objErr->doFunc(array('期間(開始日)', '期間(終了日)', 'search_startyear', 'search_startmonth', 'search_startday', 'search_endyear', 'search_endmonth', 'search_endday'), array('CHECK_SET_TERM')); } return $objErr->arrErr; }
/** * 登録を実行する. * * ファイルの作成に失敗した場合は, エラーメッセージを出力する. * * @param FormParam $objFormParam FormParam インスタンス * @return boolean 登録が成功した場合 true; 失敗した場合 false */ public function doRegister(&$objFormParam) { $division = $objFormParam->getValue('division'); $contents = $objFormParam->getValue($division); $tpl_path = $this->getTemplatePath($objFormParam->getValue('device_type_id'), $division); if ($tpl_path === false || !Application::alias('eccube.helper.file_manager')->sfWriteFile($tpl_path, $contents)) { $this->arrErr['err'] = '※ ファイルの書き込みに失敗しました<br />'; return false; } return true; }
/** * 現在の階層がルートディレクトリかどうかテンプレートに渡す * * @param FormParam $objFormParam FormParamインスタンス * @return void */ public function setIsTopDir($objFormParam) { // トップディレクトリか調査 $is_top_dir = false; // 末尾の/をとる $top_dir_check = rtrim($objFormParam->getValue('top_dir'), '/'); $now_dir_check = rtrim($objFormParam->getValue('now_dir'), '/'); if ($top_dir_check == $now_dir_check) { $is_top_dir = true; } $this->setDispParam('tpl_is_top_dir', $is_top_dir); }
/** * クエリを構築する. * * 検索条件のキーに応じた WHERE 句と, クエリパラメーターを構築する. * クエリパラメーターは, FormParam の入力値から取得する. * * 構築内容は, 引数の $where 及び $arrValues にそれぞれ追加される. * * @param string $key 検索条件のキー * @param string $where 構築する WHERE 句 * @param array $arrValues 構築するクエリパラメーター * @param FormParam $objFormParam FormParam インスタンス * @return void */ public function buildQuery($key, &$where, &$arrValues, &$objFormParam) { /* @var $dbFactory DBFactory */ $dbFactory = Application::alias('eccube.db.factory'); switch ($key) { case 'search_product_name': $where .= ' AND EXISTS (SELECT 1 FROM dtb_order_detail od WHERE od.order_id = dtb_order.order_id AND od.product_name LIKE ?)'; $arrValues[] = sprintf('%%%s%%', $objFormParam->getValue($key)); break; case 'search_order_name': $where .= ' AND ' . $dbFactory->concatColumn(array('order_name01', 'order_name02')) . ' LIKE ?'; $arrValues[] = sprintf('%%%s%%', preg_replace('/[ ]/u', '', $objFormParam->getValue($key))); break; case 'search_order_kana': $where .= ' AND ' . $dbFactory->concatColumn(array('order_kana01', 'order_kana02')) . ' LIKE ?'; $arrValues[] = sprintf('%%%s%%', preg_replace('/[ ]/u', '', $objFormParam->getValue($key))); break; case 'search_order_id1': $where .= ' AND order_id >= ?'; $arrValues[] = sprintf('%d', $objFormParam->getValue($key)); break; case 'search_order_id2': $where .= ' AND order_id <= ?'; $arrValues[] = sprintf('%d', $objFormParam->getValue($key)); break; case 'search_order_sex': $tmp_where = ''; foreach ($objFormParam->getValue($key) as $element) { if ($element != '') { if (Utils::isBlank($tmp_where)) { $tmp_where .= ' AND (order_sex = ?'; } else { $tmp_where .= ' OR order_sex = ?'; } $arrValues[] = $element; } } if (!Utils::isBlank($tmp_where)) { $tmp_where .= ')'; $where .= " {$tmp_where} "; } break; case 'search_order_tel': $where .= ' AND (' . $dbFactory->concatColumn(array('order_tel01', 'order_tel02', 'order_tel03')) . ' LIKE ?)'; $arrValues[] = SelectSql::addSearchStr(preg_replace('/[()-]+/', '', $objFormParam->getValue($key))); break; case 'search_order_email': $where .= ' AND order_email LIKE ?'; $arrValues[] = sprintf('%%%s%%', $objFormParam->getValue($key)); break; case 'search_payment_id': $tmp_where = ''; foreach ($objFormParam->getValue($key) as $element) { if ($element != '') { if ($tmp_where == '') { $tmp_where .= ' AND (payment_id = ?'; } else { $tmp_where .= ' OR payment_id = ?'; } $arrValues[] = $element; } } if (!Utils::isBlank($tmp_where)) { $tmp_where .= ')'; $where .= " {$tmp_where} "; } break; case 'search_total1': $where .= ' AND total >= ?'; $arrValues[] = sprintf('%d', $objFormParam->getValue($key)); break; case 'search_total2': $where .= ' AND total <= ?'; $arrValues[] = sprintf('%d', $objFormParam->getValue($key)); break; case 'search_sorderyear': $date = Utils::sfGetTimestamp($objFormParam->getValue('search_sorderyear'), $objFormParam->getValue('search_sordermonth'), $objFormParam->getValue('search_sorderday')); $where .= ' AND create_date >= ?'; $arrValues[] = $date; break; case 'search_eorderyear': $date = Utils::sfGetTimestamp($objFormParam->getValue('search_eorderyear'), $objFormParam->getValue('search_eordermonth'), $objFormParam->getValue('search_eorderday'), true); $where .= ' AND create_date <= ?'; $arrValues[] = $date; break; case 'search_supdateyear': $date = Utils::sfGetTimestamp($objFormParam->getValue('search_supdateyear'), $objFormParam->getValue('search_supdatemonth'), $objFormParam->getValue('search_supdateday')); $where .= ' AND update_date >= ?'; $arrValues[] = $date; break; case 'search_eupdateyear': $date = Utils::sfGetTimestamp($objFormParam->getValue('search_eupdateyear'), $objFormParam->getValue('search_eupdatemonth'), $objFormParam->getValue('search_eupdateday'), true); $where .= ' AND update_date <= ?'; $arrValues[] = $date; break; case 'search_sbirthyear': $date = Utils::sfGetTimestamp($objFormParam->getValue('search_sbirthyear'), $objFormParam->getValue('search_sbirthmonth'), $objFormParam->getValue('search_sbirthday')); $where .= ' AND order_birth >= ?'; $arrValues[] = $date; break; case 'search_ebirthyear': $date = Utils::sfGetTimestamp($objFormParam->getValue('search_ebirthyear'), $objFormParam->getValue('search_ebirthmonth'), $objFormParam->getValue('search_ebirthday'), true); $where .= ' AND order_birth <= ?'; $arrValues[] = $date; break; case 'search_order_status': $where .= ' AND status = ?'; $arrValues[] = $objFormParam->getValue($key); break; default: break; } }
/** * クエリを構築する. * * 検索条件のキーに応じた WHERE 句と, クエリパラメーターを構築する. * クエリパラメーターは, FormParam の入力値から取得する. * * 構築内容は, 引数の $where 及び $arrValues にそれぞれ追加される. * * @param string $key 検索条件のキー * @param string $where 構築する WHERE 句 * @param array $arrValues 構築するクエリパラメーター * @param FormParam $objFormParam FormParam インスタンス * @param FormParam $objDb DbHelper インスタンス * @return void */ public function buildQuery($key, &$where, &$arrValues, &$objFormParam, &$objDb) { /* @var $dbFactory DBFactory */ $dbFactory = Application::alias('eccube.db.factory'); switch ($key) { // 商品ID case 'search_product_id': $where .= ' AND product_id = ?'; $arrValues[] = sprintf('%d', $objFormParam->getValue($key)); break; // 商品コード // 商品コード case 'search_product_code': $where .= ' AND product_id IN (SELECT product_id FROM dtb_products_class WHERE product_code ILIKE ? AND del_flg = 0)'; $arrValues[] = sprintf('%%%s%%', $objFormParam->getValue($key)); break; // 商品名 // 商品名 case 'search_name': $where .= ' AND name LIKE ?'; $arrValues[] = sprintf('%%%s%%', $objFormParam->getValue($key)); break; // カテゴリ // カテゴリ case 'search_category_id': list($tmp_where, $tmp_Values) = $objDb->getCatWhere($objFormParam->getValue($key)); if ($tmp_where != '') { $where .= ' AND product_id IN (SELECT product_id FROM dtb_product_categories WHERE ' . $tmp_where . ')'; $arrValues = array_merge((array) $arrValues, (array) $tmp_Values); } break; // 種別 // 種別 case 'search_status': $tmp_where = ''; foreach ($objFormParam->getValue($key) as $element) { if ($element != '') { if (Utils::isBlank($tmp_where)) { $tmp_where .= ' AND (status = ?'; } else { $tmp_where .= ' OR status = ?'; } $arrValues[] = $element; } } if (!Utils::isBlank($tmp_where)) { $tmp_where .= ')'; $where .= " {$tmp_where} "; } break; // 登録・更新日(開始) // 登録・更新日(開始) case 'search_startyear': $date = Utils::sfGetTimestamp($objFormParam->getValue('search_startyear'), $objFormParam->getValue('search_startmonth'), $objFormParam->getValue('search_startday')); $where .= ' AND update_date >= ?'; $arrValues[] = $date; break; // 登録・更新日(終了) // 登録・更新日(終了) case 'search_endyear': $date = Utils::sfGetTimestamp($objFormParam->getValue('search_endyear'), $objFormParam->getValue('search_endmonth'), $objFormParam->getValue('search_endday'), true); $where .= ' AND update_date <= ?'; $arrValues[] = $date; break; // 商品ステータス // 商品ステータス case 'search_product_statuses': $arrPartVal = $objFormParam->getValue($key); $count = count($arrPartVal); if ($count >= 1) { $where .= ' ' . 'AND product_id IN (' . ' SELECT product_id FROM dtb_product_status WHERE product_status_id IN (' . Utils::repeatStrWithSeparator('?', $count) . ')' . ')'; $arrValues = array_merge($arrValues, $arrPartVal); } break; default: break; } }
/** * 配送情報を保存する. * * @param FormParam $objFormParam FormParam インスタンス * @param array $arrDelivTime 配送時間の配列 */ public function saveShippings(&$objFormParam, $arrDelivTime) { // ダウンロード商品の場合は配送先が存在しない if ($this->is_download) { return; } $deliv_id = $objFormParam->getValue('deliv_id'); /* TODO * Purchase::getShippingTemp() で取得して, * リファレンスで代入すると, セッションに添字を追加できない? */ foreach (array_keys($_SESSION['shipping']) as $key) { $shipping_id = $_SESSION['shipping'][$key]['shipping_id']; $time_id = $objFormParam->getValue('deliv_time_id' . $shipping_id); $_SESSION['shipping'][$key]['deliv_id'] = $deliv_id; $_SESSION['shipping'][$key]['time_id'] = $time_id; $_SESSION['shipping'][$key]['shipping_time'] = $arrDelivTime[$time_id]; $_SESSION['shipping'][$key]['shipping_date'] = $objFormParam->getValue('deliv_date' . $shipping_id); } }
/** * ブロックを配置する. * * @param FormParam $objFormParam FormParam インスタンス * @param boolean $is_preview プレビュー時の場合 true * @return void */ public function placingBlocs(&$objFormParam, $is_preview = false) { $page_id = $is_preview ? 0 : $objFormParam->getValue('page_id'); $device_type_id = $objFormParam->getValue('device_type_id'); $bloc_cnt = $objFormParam->getValue('bloc_cnt'); $objQuery = Application::alias('eccube.query'); $objQuery->begin(); $objQuery->delete('dtb_blocposition', 'page_id = ? AND device_type_id = ?', array($page_id, $device_type_id)); $arrTargetFlip = array_flip($this->arrTarget); for ($i = 1; $i <= $bloc_cnt; $i++) { // bloc_id が取得できない場合は INSERT しない $id = $objFormParam->getValue('id_' . $i); if (Utils::isBlank($id)) { continue; } // 未使用は INSERT しない $arrParams['target_id'] = $arrTargetFlip[$objFormParam->getValue('target_id_' . $i)]; if ($arrParams['target_id'] == TARGET_ID_UNUSED) { continue; } // 他のページに anywhere が存在する場合は INSERT しない $arrParams['anywhere'] = intval($objFormParam->getValue('anywhere_' . $i)); if ($arrParams['anywhere'] == 1) { $exists = $objQuery->exists('dtb_blocposition', 'anywhere = 1 AND bloc_id = ? AND device_type_id = ?', array($id, $device_type_id)); if ($exists) { continue; } } $arrParams['device_type_id'] = $device_type_id; $arrParams['page_id'] = $page_id; $arrParams['bloc_id'] = $id; $arrParams['bloc_row'] = $objFormParam->getValue('top_' . $i); if ($arrParams['page_id'] == 0) { $arrParams['anywhere'] = 0; } $objQuery->insert('dtb_blocposition', $arrParams); } $objQuery->commit(); }
/** * 入力チェックを行う. * * @param FormParam $objFormParam FormParam インスタンス * @return array エラー情報の配列 */ public function lfCheckError(FormParam &$objFormParam, &$arrCartItem) { /* @var $objCartSess CartSession */ $objCartSess = Application::alias('eccube.cart_session'); $objFormParam->setValue('quantity', $objFormParam->getValue('quantity', 0)); $arrErr = $objFormParam->checkError(); $arrParams = $objFormParam->getSwapArray(); if (empty($arrErr)) { $arrTarget = array('product_class_id', 'quantity', 'shipping'); $arrParams = $objFormParam->getSwapArray($arrTarget); foreach ($arrParams as $index => $arrParam) { // 数量0で、お届け先を選択している場合 if ($arrParam['quantity'] == 0 && !Utils::isBlank($arrParam['shipping'])) { $arrErr['shipping'][$index] = '※ 数量が0の場合、お届け先を入力できません。<br />'; } // 数量の入力があり、お届け先を選択していない場合 if ($arrParam['quantity'] > 0 && Utils::isBlank($arrParam['shipping'])) { $arrErr['shipping'][$index] = '※ お届け先が入力されていません。<br />'; } } } // 入力エラーが無い場合、カゴの中身との数量の整合を確認 if (empty($arrErr)) { $arrQuantity = array(); // 入力内容を集計 foreach ($arrParams as $arrParam) { $product_class_id = $arrParam['product_class_id']; $arrQuantity[$product_class_id] += $arrParam['quantity']; } // カゴの中身と突き合わせ foreach ($arrCartItem as $item) { $product_class_id = $item['id']; // 差異がある場合、エラーを記録 if ($item['quantity'] != $arrQuantity[$product_class_id]) { foreach ($arrParams as $index => $arrParam) { if ($arrParam['product_class_id'] == $product_class_id) { $arrErr['line_of_num'][$product_class_id] = "※ 数量合計を「{$item['quantity']}」にしてください。<br />"; } } } } } return $arrErr; }
/** * 登録を実行する. * * ファイルの作成に失敗した場合は, エラーメッセージを出力し, * データベースをロールバックする. * * @param FormParam $objFormParam FormParam インスタンス * @param PageLayoutHelper $objLayout PageLayoutHelper インスタンス * @return integer|boolean 登録が成功した場合, 登録したページID; * 失敗した場合 false */ public function doRegister(&$objFormParam, &$objLayout) { $filename = $objFormParam->getValue('filename'); $arrParams['device_type_id'] = $objFormParam->getValue('device_type_id'); $arrParams['page_id'] = $objFormParam->getValue('page_id'); $arrParams['header_chk'] = intval($objFormParam->getValue('header_chk')) === 1 ? 1 : 2; $arrParams['footer_chk'] = intval($objFormParam->getValue('footer_chk')) === 1 ? 1 : 2; $arrParams['tpl_data'] = $objFormParam->getValue('tpl_data'); $arrParams['page_name'] = $objFormParam->getValue('page_name'); $arrParams['url'] = USER_DIR . $filename . '.php'; $arrParams['filename'] = USER_DIR . $filename; $arrParams['author'] = $objFormParam->getValue('author'); $arrParams['description'] = $objFormParam->getValue('description'); $arrParams['keyword'] = $objFormParam->getValue('keyword'); $arrParams['meta_robots'] = $objFormParam->getValue('meta_robots'); $objQuery = Application::alias('eccube.query'); $objQuery->begin(); $page_id = $this->registerPage($arrParams, $objLayout); /* * 新規登録時 * or 編集可能な既存ページ編集時かつ, PHP ファイルが存在しない場合に, * PHP ファイルを作成する. */ if (Utils::isBlank($arrParams['page_id']) || $objLayout->isEditablePage($arrParams['device_type_id'], $arrParams['page_id'])) { if (!$this->createPHPFile($filename)) { $this->arrErr['err'] = '※ PHPファイルの作成に失敗しました<br />'; $objQuery->rollback(); return false; } // 新規登録時のみ $page_id を代入 $arrParams['page_id'] = $page_id; } if ($objLayout->isEditablePage($arrParams['device_type_id'], $page_id)) { $tpl_path = $objLayout->getTemplatePath($arrParams['device_type_id']) . $arrParams['filename'] . '.tpl'; } else { $tpl_path = $objLayout->getTemplatePath($arrParams['device_type_id']) . $filename . '.tpl'; } if (!Application::alias('eccube.helper.file_manager')->sfWriteFile($tpl_path, $arrParams['tpl_data'])) { $this->arrErr['err'] = '※ TPLファイルの書き込みに失敗しました<br />'; $objQuery->rollback(); return false; } $objQuery->commit(); return $arrParams['page_id']; }
/** * 配信内容と配信リストを書き込む * * @param FormParam $objFormParam * @return integer 登録した行の dtb_send_history.send_id の値 */ public function lfRegisterData(&$objFormParam) { $objQuery = Application::alias('eccube.query'); list($linemax, $arrSendCustomer, $objNavi) = Application::alias('eccube.helper.customer')->sfGetSearchData($objFormParam->getHashArray(), 'All'); $send_customer_cnt = count($arrSendCustomer); $send_id = $objQuery->nextVal('dtb_send_history_send_id'); $dtb_send_history = array(); $dtb_send_history['mail_method'] = $objFormParam->getValue('mail_method'); $dtb_send_history['subject'] = $objFormParam->getValue('subject'); $dtb_send_history['body'] = $objFormParam->getValue('body'); $dtb_send_history['start_date'] = 'CURRENT_TIMESTAMP'; $dtb_send_history['creator_id'] = $_SESSION['member_id']; $dtb_send_history['send_count'] = $send_customer_cnt; $dtb_send_history['search_data'] = serialize($objFormParam->getSearchArray()); $dtb_send_history['update_date'] = 'CURRENT_TIMESTAMP'; $dtb_send_history['create_date'] = 'CURRENT_TIMESTAMP'; $dtb_send_history['send_id'] = $send_id; $objQuery->insert('dtb_send_history', $dtb_send_history); // 「配信メールアドレス種別」に携帯メールアドレスが指定されている場合は、携帯メールアドレスに配信 $emailtype = 'email'; $searchmailtype = $objFormParam->getValue('search_mail_type'); if ($searchmailtype == 2 || $searchmailtype == 4) { $emailtype = 'email_mobile'; } if (is_array($arrSendCustomer)) { foreach ($arrSendCustomer as $line) { $dtb_send_customer = array(); $dtb_send_customer['customer_id'] = $line['customer_id']; $dtb_send_customer['send_id'] = $send_id; $dtb_send_customer['email'] = $line[$emailtype]; $dtb_send_customer['name'] = $line['name01'] . ' ' . $line['name02']; $objQuery->insert('dtb_send_customer', $dtb_send_customer); } } return $send_id; }
/** * エラーチェックを行う. * * @param FormParam $objFormParam FormParam インスタンス * @return array エラーメッセージの配列 */ public function lfCheckError(&$objFormParam, &$arrErr) { $arrParams = $objFormParam->getHashArray(); /* @var $objErr CheckError */ $objErr = Application::alias('eccube.check_error', $arrParams); $objErr->arrErr =& $arrErr; $objErr->doFunc(array('CSSファイル名', 'css_name', STEXT_LEN), array('EXIST_CHECK', 'SPTAB_CHECK', 'MAX_LENGTH_CHECK', 'FILE_NAME_CHECK_BY_NOUPLOAD')); $css_name = $objFormParam->getValue('css_name'); $old_css_name = $objFormParam->getValue('old_css_name'); $device_type_id = $objFormParam->getValue('device_type_id', DEVICE_TYPE_PC); $is_error = false; // 重複チェック if (Utils::isBlank($objErr->arrErr['css_name'])) { $arrCSSList = $this->getCSSList($this->getCSSDir($device_type_id)); foreach ($arrCSSList as $val) { if ($val['css_name'] == $css_name) { if (Utils::isBlank($old_css_name) || $old_css_name != $css_name) { $is_error = true; } } } if ($is_error) { $objErr->arrErr['css_name'] = '※ 同じファイル名のデータが存在しています。別の名称を付けてください。<br />'; } } return $objErr->arrErr; }
/** * 受注商品一覧側に商品を追加 * * @param FormParam $objFormParam FormParam インスタンス * @param array $arrProductClassIds 対象配列の商品規格ID * @param int $insert_product_class_id 追加商品規格ID * @param array $arrAddProductInfo 追加データ * @return array|null $arrAddProducts 更新データ */ public function checkInsertOrderProducts(&$objFormParam, $arrProductClassIds, $insert_product_class_id, $arrAddProductInfo) { if (!$arrProductClassIds || !in_array($insert_product_class_id, $arrProductClassIds)) { $arrAddProducts = array(); $arrTax = TaxRuleHelper::getTaxRule(0, $insert_product_class_id); $arrAddProductInfo['product_name'] = $arrAddProductInfo['product_name'] ? $arrAddProductInfo['product_name'] : $arrAddProductInfo['name']; $arrAddProductInfo['price'] = $arrAddProductInfo['price'] ? $arrAddProductInfo['price'] : $arrAddProductInfo['price02']; $arrAddProductInfo['quantity'] = 1; $arrAddProductInfo['tax_rate'] = $objFormParam->getValue('order_tax_rate') == '' ? $arrTax['tax_rate'] : $objFormParam->getValue('order_tax_rate'); $arrAddProductInfo['tax_rule'] = $objFormParam->getValue('order_tax_rule') == '' ? $arrTax['tax_rule'] : $objFormParam->getValue('order_tax_rule'); foreach ($this->arrProductKeys as $insert_key) { $value = $objFormParam->getValue($insert_key); $arrAddProducts[$insert_key] = is_array($value) ? $value : array(); $arrAddProducts[$insert_key][] = $arrAddProductInfo[$insert_key]; } return $arrAddProducts; } else { //受注商品の数量は、複数配送側の集計で出しているので、重複しても数量を増やさない。 return null; } }
/** * 受注データを取得して, FormParam へ設定する. * * @param FormParam $objFormParam FormParam インスタンス * @param integer $order_id 取得元の受注ID * @return void */ public function setOrderToFormParam(&$objFormParam, $order_id) { /* @var $objPurchase PurchaseHelper */ $objPurchase = Application::alias('eccube.helper.purchase'); // 受注詳細を設定 $arrOrderDetail = $objPurchase->getOrderDetail($order_id, false); $objFormParam->setParam(Utils::sfSwapArray($arrOrderDetail)); $arrShippingsTmp = $objPurchase->getShippings($order_id); $arrShippings = array(); foreach ($arrShippingsTmp as $row) { // お届け日の処理 if (!Utils::isBlank($row['shipping_date'])) { $ts = strtotime($row['shipping_date']); $row['shipping_date_year'] = date('Y', $ts); $row['shipping_date_month'] = date('n', $ts); $row['shipping_date_day'] = date('j', $ts); } $arrShippings[$row['shipping_id']] = $row; } $objFormParam->setParam(Utils::sfSwapArray($arrShippings)); /* * 配送商品を設定 * * $arrShipmentItem['shipment_(key)'][$shipping_id][$item_index] = 値 * $arrProductQuantity[$shipping_id] = 配送先ごとの配送商品数量 */ $arrProductQuantity = array(); $arrShipmentItem = array(); foreach ($arrShippings as $shipping_id => $arrShipping) { $arrProductQuantity[$shipping_id] = count($arrShipping['shipment_item']); foreach ($arrShipping['shipment_item'] as $item_index => $arrItem) { foreach ($arrItem as $item_key => $item_val) { $arrShipmentItem['shipment_' . $item_key][$shipping_id][$item_index] = $item_val; } } } $objFormParam->setValue('shipping_product_quantity', $arrProductQuantity); $objFormParam->setParam($arrShipmentItem); /* * 受注情報を設定 * $arrOrderDetail と項目が重複しており, $arrOrderDetail は連想配列の値 * が渡ってくるため, $arrOrder で上書きする. */ $arrOrder = $objPurchase->getOrder($order_id); // 生年月日の処理 if (!Utils::isBlank($arrOrder['order_birth'])) { $order_birth = substr($arrOrder['order_birth'], 0, 10); $arrOrderBirth = explode("-", $order_birth); $arrOrder['order_birth_year'] = intval($arrOrderBirth[0]); $arrOrder['order_birth_month'] = intval($arrOrderBirth[1]); $arrOrder['order_birth_day'] = intval($arrOrderBirth[2]); } $objFormParam->setParam($arrOrder); // ポイントを設定 list($db_point, $rollback_point) = Application::alias('eccube.helper.db')->getRollbackPoint($order_id, $arrOrder['use_point'], $arrOrder['add_point'], $arrOrder['status']); $objFormParam->setValue('total_point', $db_point); $objFormParam->setValue('point', $rollback_point); if (!Utils::isBlank($objFormParam->getValue('customer_id'))) { $arrCustomer = Application::alias('eccube.helper.customer')->sfGetCustomerDataFromId($objFormParam->getValue('customer_id')); $objFormParam->setValue('customer_point', $arrCustomer['point']); } }
/** * アップロードした一時ファイルを保存する. * * @param FormParam $objFormParam FormParam インスタンス * @return void */ public function doUploadComplete(&$objFormParam) { $objImage = new Image(DOWN_TEMP_REALDIR); $arrRealFileName = $objFormParam->getValue('down_realfilename'); if (is_array($arrRealFileName)) { foreach ($arrRealFileName as $real_file_name) { $objImage->moveTempImage($real_file_name, DOWN_SAVE_REALDIR); } } }