/** * 入力内容のチェック * @var SC_FormParam * @param SC_FormParam $objFormParam */ public function lfCheckError(&$objFormParam) { // 入力データを渡す。 $arrParams = $objFormParam->getHashArray(); $arrErr = $objFormParam->checkError(); $objError = new SC_CheckError_Ex($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 SC_FormParam $objFormParam SC_FormParam インスタンス * @return boolen $file_check_flg エラーチェックの結果 */ function checkErrorDispFile($objFormParam) { $file_check_flg = false; // FIXME パスのチェック関数が必要 $file = $objFormParam->getValue('file'); if (!preg_match('|\\./|', $file)) { $file_check_flg = true; } return $file_check_flg; }
/** * クエリを構築する. * * 検索条件のキーに応じた WHERE 句と, クエリパラメーターを構築する. * クエリパラメーターは, SC_FormParam の入力値から取得する. * * 構築内容は, 引数の $where 及び $arrValues にそれぞれ追加される. * * @param string $key 検索条件のキー * @param string $where 構築する WHERE 句 * @param array $arrValues 構築するクエリパラメーター * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @param SC_FormParam $objDb SC_Helper_DB_Ex インスタンス * @return void */ function buildQuery($key, &$where, &$arrValues, &$objFormParam, &$objDb) { $dbFactory = SC_DB_DBFactory_Ex::getInstance(); 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 ?)'; $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->sfGetCatWhere($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 (SC_Utils_Ex::isBlank($tmp_where)) { $tmp_where .= ' AND (status = ?'; } else { $tmp_where .= ' OR status = ?'; } $arrValues[] = $element; } } if (!SC_Utils_Ex::isBlank($tmp_where)) { $tmp_where .= ')'; $where .= " {$tmp_where} "; } break; // 登録・更新日(開始) // 登録・更新日(開始) case 'search_startyear': $date = SC_Utils_Ex::sfGetTimestamp($objFormParam->getValue('search_startyear'), $objFormParam->getValue('search_startmonth'), $objFormParam->getValue('search_startday')); $where .= ' AND update_date >= ?'; $arrValues[] = $date; break; // 登録・更新日(終了) // 登録・更新日(終了) case 'search_endyear': $date = SC_Utils_Ex::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 (' . SC_Utils_Ex::repeatStrWithSeparator('?', $count) . ')' . ')'; $arrValues = array_merge($arrValues, $arrPartVal); } break; default: break; } }
/** * カテゴリの表示順序を下へ移動する. * * @param SC_FormParam $objFormParam * @return void */ function doDown(&$objFormParam) { $category_id = $objFormParam->getValue('category_id'); $objQuery =& SC_Query_Ex::getSingletonInstance(); $objQuery->begin(); $down_id = $this->lfGetDownRankID($objQuery, 'dtb_category', 'parent_category_id', 'category_id', $category_id); if ($down_id != '') { // 下のグループのrankに加算する数 $my_count = $this->lfCountChilds($objQuery, 'dtb_category', 'parent_category_id', 'category_id', $category_id); // 自分のグループのrankから減算する数 $down_count = $this->lfCountChilds($objQuery, 'dtb_category', 'parent_category_id', 'category_id', $down_id); if ($my_count > 0 && $down_count > 0) { // 自分のグループから減算 $this->lfUpRankChilds($objQuery, 'dtb_category', 'parent_category_id', 'category_id', $down_id, $my_count); // 下のグループに加算 $this->lfDownRankChilds($objQuery, 'dtb_category', 'parent_category_id', 'category_id', $category_id, $down_count); } } $objQuery->commit(); }
/** * エラーチェックを行う. * * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @return array エラーメッセージの配列 */ public function lfCheckError(&$objFormParam, &$arrErr) { $arrParams = $objFormParam->getHashArray(); $objErr = new SC_CheckError_Ex($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 (SC_Utils_Ex::isBlank($objErr->arrErr['css_name'])) { $arrCSSList = $this->getCSSList($this->getCSSDir($device_type_id)); foreach ($arrCSSList as $val) { if ($val['css_name'] == $css_name) { if (SC_Utils_Ex::isBlank($old_css_name) || $old_css_name != $css_name) { $is_error = true; } } } if ($is_error) { $objErr->arrErr['css_name'] = '※ 同じファイル名のデータが存在しています。別の名称を付けてください。<br />'; } } return $objErr->arrErr; }
/** * 登録を実行する. * * ファイルの作成に失敗した場合は, エラーメッセージを出力する. * * @param SC_FormParam $objFormParam SC_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 || !SC_Helper_FileManager_Ex::sfWriteFile($tpl_path, $contents)) { $this->arrErr['err'] = '※ ファイルの書き込みに失敗しました<br />'; return false; } return true; }
/** * ディレクトリツリー生成 * * @param object $objFileManager SC_Helper_FileManager_Exインスタンス * @param SC_FormParam $objFormParam SC_FormParamインスタンス * @return void */ function setDispTree($objFileManager, $objFormParam) { $tpl_onload = ''; // ツリーを表示する divタグid, ツリー配列変数名, 現在ディレクトリ, 選択ツリーhidden名, ツリー状態hidden名, mode hidden名 $now_dir = $objFormParam->getValue('now_dir'); $treeView = "fnTreeView('tree', arrTree, '{$now_dir}', 'tree_select_file', 'tree_status', 'move');"; if (!empty($this->tpl_onload)) { $tpl_onload .= $treeView; } else { $tpl_onload = $treeView; } $this->setTplOnLoad($tpl_onload); $tpl_javascript = ''; $arrTree = $objFileManager->sfGetFileTree($objFormParam->getValue('top_dir'), $objFormParam->getValue('tree_status')); $tpl_javascript .= "arrTree = new Array();\n"; foreach ($arrTree as $arrVal) { $tpl_javascript .= "arrTree[" . $arrVal['count'] . "] = new Array(" . $arrVal['count'] . ", '" . $arrVal['type'] . "', '" . $arrVal['path'] . "', " . $arrVal['rank'] . ","; if ($arrVal['open']) { $tpl_javascript .= "true);\n"; } else { $tpl_javascript .= "false);\n"; } } $this->setDispParam('tpl_javascript', $tpl_javascript); }
/** * 登録を実行する. * * ファイルの作成に失敗した場合は, エラーメッセージを出力し, * データベースをロールバックする. * * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @param SC_Helper_PageLayout $objLayout SC_Helper_PageLayout インスタンス * @return integer|boolean 登録が成功した場合, 登録したページID; * 失敗した場合 false */ 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; $objQuery =& SC_Query_Ex::getSingletonInstance(); $objQuery->begin(); $page_id = $this->registerPage($arrParams, $objLayout); /* * 新規登録時 * or 編集可能な既存ページ編集時かつ, PHP ファイルが存在しない場合に, * PHP ファイルを作成する. */ if (SC_Utils_Ex::isBlank($arrParams['page_id']) || $objLayout->isEditablePage($arrParams['device_type_id'], $arrParams['page_id'])) { if (!$this->createPHPFile($filename)) { $this->arrErr['err'] = t('c_* PHP file creation failed<br />_01'); $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 (!SC_Helper_FileManager_Ex::sfWriteFile($tpl_path, $arrParams['tpl_data'])) { $this->arrErr['err'] = t('c_* TPL file writing failed<br />_01'); $objQuery->rollback(); return false; } $objQuery->commit(); return $arrParams['page_id']; }
/** * 配信内容と配信リストを書き込む * * @param SC_FormParam $objFormParam * @return integer 登録した行の dtb_send_history.send_id の値 */ public function lfRegisterData(&$objFormParam) { $objQuery =& SC_Query_Ex::getSingletonInstance(); list($linemax, $arrSendCustomer, $objNavi) = SC_Helper_Customer_Ex::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; }
/** * クエリを構築する. * * 検索条件のキーに応じた WHERE 句と, クエリパラメーターを構築する. * クエリパラメーターは, SC_FormParam の入力値から取得する. * * 構築内容は, 引数の $where 及び $arrValues にそれぞれ追加される. * * @param string $key 検索条件のキー * @param string $where 構築する WHERE 句 * @param array $arrValues 構築するクエリパラメーター * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @param SC_FormParam $objDb SC_Helper_DB_Ex インスタンス * @return void */ public function buildQuery($key, &$where, &$arrValues, SC_FormParam &$objFormParam, SC_Helper_DB &$objDb) { $objSql = new SC_SelectSql_Ex(); $objSql->setWhere($where); $objQuery = new SC_Query_Ex("", false, true); $data = array(); $id = "product_id"; $extends = true; $value = $objFormParam->getValue($key); switch ($key) { case "search_orderby": $column = "update_date"; switch ($value) { default: case "date": $column = "auto_display_start_date"; } if ($objDb->sfColumnExists("dtb_products", $column)) { $this->order = $column; } break; case "search_character_id": $sub_query = $objQuery->getSql($id, "cp_dtb_product_characters", "character_id=?"); $objSql->setWhere("{$id} IN ({$sub_query})"); $arrValues[] = $value; break; case "search_auto_display_status": if (is_array($value)) { $data = $objSql->setItemTerm($value, "auto_display_status"); } elseif (is_string($value)) { $data = $objSql->setItemTerm((array) $value, "auto_display_status"); } break; case "search_auto_display_start_date_start_year": case "search_auto_display_start_date_end_year": case "search_auto_display_end_date_start_year": case "search_auto_display_end_date_end_year": case "search_spass_provide_start_date_start_year": case "search_spass_provide_start_date_end_year": case "search_spass_provide_end_date_start_year": case "search_spass_provide_end_date_end_year": $y = $objFormParam->getValue($key); $m = $objFormParam->getValue(str_replace("_year", "_month", $key)); $d = $objFormParam->getValue(str_replace("_year", "_day", $key)); switch ($key) { case "search_auto_display_start_date_start_year": $data = $objSql->selectTermRange($y, $m, $d, "", "", "", "auto_display_start_date"); break; case "search_auto_display_start_date_end_year": $data = $objSql->selectTermRange("", "", "", $y, $m, $d, "auto_display_start_date"); break; case "search_auto_display_end_date_start_year": $data = $objSql->selectTermRange($y, $m, $d, "", "", "", "auto_display_end_date"); break; case "search_auto_display_end_date_end_year": $data = $objSql->selectTermRange("", "", "", $y, $m, $d, "auto_display_end_date"); break; case "search_spass_provide_start_date_start_year": $data = $objSql->selectTermRange($y, $m, $d, "", "", "", "spass_provide_start_date"); break; case "search_search_spass_provide_start_date_end_year": $data = $objSql->selectTermRange("", "", "", $y, $m, $d, "spass_provide_start_date"); break; case "search_search_spass_provide_end_date_start_year": $data = $objSql->selectTermRange($y, $m, $d, "", "", "", "spass_provide_end_date"); break; case "search_search_spass_provide_end_date_end_year": $data = $objSql->selectTermRange("", "", "", $y, $m, $d, "spass_provide_end_date"); break; } break; default: $extends = false; parent::buildQuery($key, $where, $arrValues, $objFormParam, $objDb); } if ($extends) { foreach ($data as $d) { $arrValues[] = $d; } $where = $objSql->getWhere(); } }
/** * * テンプレートの文言をフォームに入れる。 * @param SC_FormParam $objFormParam */ function changeData(&$objFormParam) { $objQuery =& SC_Query_Ex::getSingletonInstance(); $template_id = $objFormParam->getValue('template_id'); // 未選択時 if (strlen($template_id) === 0) { $mailTemplates = null; } elseif (SC_Utils_Ex::sfIsInt($template_id)) { $where = 'template_id = ?'; $arrWhereVal = array($template_id); $mailTemplates = $objQuery->getRow('subject, header, footer', 'dtb_mailtemplate', $where, $arrWhereVal); } 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; }
/** * 現在の階層がルートディレクトリかどうかテンプレートに渡す * * @param SC_FormParam $objFormParam SC_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); }
/** * アクセスチェック * * @return boolean */ public function isValidAccess($mode) { $objLog = new LC_Upgrade_Helper_Log(); switch ($mode) { // モジュールダウンロード case 'download': if ($this->isLoggedInAdminPage() === true) { $objLog->log('* admin login ok'); return true; } break; // 自動アップロード最新ファイル取得 // 自動アップロード最新ファイル取得 case 'patch_download': // モジュール自動アップロード // モジュール自動アップロード case 'auto_update': $objForm = new SC_FormParam(); $objForm->addParam('public_key', 'public_key', MTEXT_LEN, '', array('EXIST_CHECK', 'ALNUM_CHECK', 'MAX_LENGTH_CHECK')); $objForm->addParam('sha1_key', 'sha1_key', MTEXT_LEN, '', array('EXIST_CHECK', 'ALNUM_CHECK', 'MAX_LENGTH_CHECK')); $objForm->setParam($_POST); $objLog->log('* param check start'); $arrErr = $objForm->checkError(); if ($arrErr) { $objLog->log('* invalid param ' . print_r($arrErr, true)); return false; } $objLog->log('* public_key check start'); $public_key = $this->getPublicKey(); if (empty($public_key)) { $objLog->log('* public_key not found'); return false; } $sha1_key = $objForm->getValue('sha1_key'); $public_key_sha1 = $objForm->getValue('public_key'); $objLog->log('* ip check start'); if ($public_key_sha1 === sha1($public_key . $sha1_key)) { $objLog->log('* auto update login ok'); return true; } break; default: $objLog->log('* mode invalid ' . $mode); return false; } return false; }
/** * 配送情報を保存する. * * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @param array $arrDelivTime 配送時間の配列 */ public function saveShippings(&$objFormParam, $arrDelivTime) { // ダウンロード商品の場合は配送先が存在しない if ($this->is_download) { return; } $deliv_id = $objFormParam->getValue('deliv_id'); /* TODO * SC_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); } }
static function search(LC_Page $objPage, SC_FormParam $objFormParam, SC_Query $objQuery) { // edit_** を除外する $objSql = new SC_DeviceAndroidSelect_Ex($objFormParam->getSearchArray(), "master"); $objPage->tpl_linemax = $objSql->getCount(); if ($objPage->tpl_linemax == 0) { return; } $objPage->page_max = $objFormParam->getValue("search_page_max", SEARCH_PMAX); $objPage->page = $objFormParam->getValue("search_pageno", 1); $objPage->objPageNavi = new SC_PageNavi_Ex($objPage->page, $objPage->tpl_linemax, $objPage->page_max, 'eccube.moveSearchPage', NAVI_PMAX); $objPage->arrPagenavi = $objPage->objPageNavi->arrPagenavi; $objSql->setOrder("device_name ASC"); $objPage->arrData = $objSql->getList($objPage->objPageNavi, $objPage->page_max); $objPage->arrData = SC_Utils_Ex::makeArrayIDToKey("device_id", $objPage->arrData); foreach ($objPage->arrData as $device_id => &$arrData) { $arrData["category_id"] = $objQuery->getCol("category_id", "cp_dtb_device_categories", "device_id=?", (array) $device_id); $release_date = SC_Utils_Ex::sfDispDBDate($arrData["release_date"], false); if ($release_date) { $arrData["release_date"] = str_replace("1970/01/01", "", $release_date); } $last_access_date = SC_Utils_Ex::sfDispDBDate($arrData["last_access_date"], false); if ($last_access_date) { $arrData["last_access_date"] = str_replace("1970/01/01", "", $last_access_date); } $device_name = trim($arrData["device_name"]); $arrData["disp_device_name"] = str_replace("(", "\n(", $device_name); } }
/** * 受注商品一覧側に商品を追加 * * @param SC_FormParam $objFormParam SC_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 = SC_Helper_TaxRule_Ex::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; } }
/** * クエリを構築する. * * 検索条件のキーに応じた WHERE 句と, クエリパラメーターを構築する. * クエリパラメーターは, SC_FormParam の入力値から取得する. * * 構築内容は, 引数の $where 及び $arrValues にそれぞれ追加される. * * @param string $key 検索条件のキー * @param string $where 構築する WHERE 句 * @param array $arrValues 構築するクエリパラメーター * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @return void */ public function buildQuery($key, &$where, &$arrValues, &$objFormParam) { switch ($key) { case "search_year": case "search_month": case "search_day": if ($key != "search_year") { break; } $y = $objFormParam->getValue('search_year'); $m = $objFormParam->getValue('search_month'); $d = $objFormParam->getValue('search_day'); $where .= ' AND create_date BETWEEN ? AND ? '; $arrValues[] = SC_Utils_Ex::sfGetTimestamp($y, $m, $d); $arrValues[] = SC_Utils_Ex::sfGetTimestamp($y, $m, $d, true); break; case 'search_order_id': $where .= ' AND order_id = ?'; $arrValues[] = sprintf('%d', $objFormParam->getValue($key)); break; case 'search_customer_id': $where .= ' AND customer_id = ?'; $arrValues[] = sprintf('%d', $objFormParam->getValue($key)); break; case 'search_product_id': $where .= ' AND EXISTS (SELECT 1 FROM dtb_order_detail od WHERE od.order_id = dtb_order.order_id AND od.product_id = ?)'; $arrValues[] = sprintf('%d', $objFormParam->getValue($key)); break; default: parent::buildQuery($key, $where, $arrValues, $objFormParam); break; } }
/** * DBおよびファイルシステムにテンプレートパッケージを追加する. * * エラーが発生した場合は, エラーを出力し, false を返す. * * @param SC_FormParam $objFormParam SC_FormParamのインスタンス * @param SC_UploadFile_Ex $objUpFile SC_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 =& SC_Query_Ex::getSingletonInstance(); $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 (!SC_Helper_FileManager_Ex::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 (!SC_Utils_Ex::recursiveMkdir($to_dir)) { $this->arrErr['err'] = '※ ' . $to_dir . ' の作成に失敗しました。<br/>'; $objQuery->rollback(); return false; } SC_Utils_Ex::sfCopyDir($from_dir, $to_dir); $objQuery->commit(); return true; }
/** * 入力チェックを行う. * * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @return array エラー情報の配列 */ public function lfCheckError(&$objFormParam) { $objCartSess = new SC_CartSession_Ex(); $objFormParam->convParam(); // 数量未入力は0に置換 $objFormParam->setValue('quantity', $objFormParam->getValue('quantity', 0)); $arrErr = $objFormParam->checkError(); $arrParams = $objFormParam->getSwapArray(); if (empty($arrErr)) { foreach ($arrParams as $index => $arrParam) { // 数量0で、お届け先を選択している場合 if ($arrParam['quantity'] == 0 && !SC_Utils_Ex::isBlank($arrParam['shipping'])) { $arrErr['shipping'][$index] = '※ 数量が0の場合、お届け先を入力できません。<br />'; } // 数量の入力があり、お届け先を選択していない場合 if ($arrParam['quantity'] > 0 && SC_Utils_Ex::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']; } // カゴの中身と突き合わせ $cartLists =& $objCartSess->getCartList($objCartSess->getKey()); foreach ($cartLists as $arrCartRow) { $product_class_id = $arrCartRow['id']; // 差異がある場合、エラーを記録 if ($arrCartRow['quantity'] != $arrQuantity[$product_class_id]) { foreach ($arrParams as $index => $arrParam) { if ($arrParam['product_class_id'] == $product_class_id) { $arrErr['quantity'][$index] = '※ 数量合計を「' . $arrCartRow['quantity'] . '」にしてください。<br />'; } } } } } return $arrErr; }
/** * * テンプレートの文言をフォームに入れる。 * @param SC_FormParam $objFormParam */ public function changeData(&$objFormParam) { $template_id = $objFormParam->getValue('template_id'); // 未選択時 if (strlen($template_id) === 0) { $mailTemplates = null; // 有効選択時 } elseif (SC_Utils_Ex::sfIsInt($template_id)) { $objMailtemplate = new SC_Helper_Mailtemplate_Ex(); $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; }
/** * アンカーキーを取得する. * * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @return アンカーキーの文字列 */ function getAnchorKey(&$objFormParam) { $ancor_key = $objFormParam->getValue('anchor_key'); if (!SC_Utils_Ex::isBlank($ancor_key)) { return "location.hash='#" . htmlentities(urlencode($ancor_key), ENT_QUOTES) . "'"; } return ''; }
/** * クエリを構築する. * * 検索条件のキーに応じた WHERE 句と, クエリパラメーターを構築する. * クエリパラメーターは, SC_FormParam の入力値から取得する. * * 構築内容は, 引数の $where 及び $arrValues にそれぞれ追加される. * * @param string $key 検索条件のキー * @param string $where 構築する WHERE 句 * @param array $arrValues 構築するクエリパラメーター * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @return void */ function buildQuery($key, &$where, &$arrValues, &$objFormParam) { $dbFactory = SC_DB_DBFactory_Ex::getInstance(); 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%%', $objFormParam->getValue($key)); break; case 'search_order_kana': $where .= ' AND ' . $dbFactory->concatColumn(array('order_kana01', 'order_kana02')) . ' LIKE ?'; $arrValues[] = sprintf('%%%s%%', $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 (SC_Utils_Ex::isBlank($tmp_where)) { $tmp_where .= ' AND (order_sex = ?'; } else { $tmp_where .= ' OR order_sex = ?'; } $arrValues[] = $element; } } if (!SC_Utils_Ex::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[] = sprintf('%%%d%%', 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 (!SC_Utils_Ex::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 = SC_Utils_Ex::sfGetTimestamp($objFormParam->getValue('search_sorderyear'), $objFormParam->getValue('search_sordermonth'), $objFormParam->getValue('search_sorderday')); $where .= ' AND create_date >= ?'; $arrValues[] = $date; break; case 'search_eorderyear': $date = SC_Utils_Ex::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 = SC_Utils_Ex::sfGetTimestamp($objFormParam->getValue('search_supdateyear'), $objFormParam->getValue('search_supdatemonth'), $objFormParam->getValue('search_supdateday')); $where .= ' AND update_date >= ?'; $arrValues[] = $date; break; case 'search_eupdateyear': $date = SC_Utils_Ex::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 = SC_Utils_Ex::sfGetTimestamp($objFormParam->getValue('search_sbirthyear'), $objFormParam->getValue('search_sbirthmonth'), $objFormParam->getValue('search_sbirthday')); $where .= ' AND order_birth >= ?'; $arrValues[] = $date; break; case 'search_ebirthyear': $date = SC_Utils_Ex::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; } }
/** * 配送情報を保存する. * * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @param array $arrDelivTime 配送時間の配列 */ function saveShippings(&$objFormParam, $arrDelivTime) { $deliv_id = $objFormParam->getValue('deliv_id'); /* TODO * SC_Purchase::getShippingTemp() で取得して, * リファレンスで代入すると, セッションに添字を追加できない? */ foreach ($_SESSION['shipping'] as $key => $value) { $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 SC_FormParam $objFormParam SC_FormParam インスタンス * @param boolean $is_preview プレビュー時の場合 true * @return void */ 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 =& SC_Query_Ex::getSingletonInstance(); $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 (SC_Utils_Ex::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 SC_FormParam $objFormParam SC_FormParam インスタンス * @param SC_Helper_PageLayout $objLayout SC_Helper_PageLayout インスタンス * @return integer|boolean 登録が成功した場合, 登録したページID; * 失敗した場合 false */ 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; $objQuery =& SC_Query_Ex::getSingletonInstance(); $objQuery->begin(); $page_id = $this->registerPage($arrParams, $objLayout); $objBlob = new SC_Helper_Blob_Ex(); $containerName = $objBlob->getTemplateContainerName($arrParams['device_type_id']); /* * 新規登録時 * or 編集可能な既存ページ編集時かつ, PHP ファイルが存在しない場合に, * PHP ファイルを作成する. */ if (SC_Utils_Ex::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 (!$objBlob->putBlobData($containerName, $arrParams['filename'] . '.tpl', $arrParams['tpl_data'])) { $this->arrErr['err'] = '※ TPLファイルの書き込みに失敗しました<br />'; $objQuery->rollback(); return false; } //既存のTPLが存在する場合は削除しておく if (file_exists($tpl_path)) { unlink($tpl_path); } $objQuery->commit(); return $arrParams['page_id']; }
/** * アップロードした一時ファイルを保存する. * * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @return void */ function doUploadComplete(&$objFormParam) { $objImage = new SC_Image_Ex(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); } } }
/** * 表示するファイルにエラーチェックを行う * * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @return boolean $file_check_flg エラーチェックの結果 */ public function checkErrorDispFile($objFormParam) { $file_check_flg = false; // FIXME パスのチェック関数が必要 $file = $objFormParam->getValue('file'); $path_exists = SC_Utils::checkFileExistsWithInBasePath($file, USER_REALDIR); if ($path_exists) { $file_check_flg = true; } return $file_check_flg; }
/** * エラーチェックを行う. * * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @return array エラーメッセージの配列 */ function lfCheckError(&$objFormParam, &$arrErr) { $arrParams = $objFormParam->getHashArray(); $objErr = new SC_CheckError_Ex($arrParams); $objErr->arrErr =& $arrErr; $objErr->doFunc(array(t('c_CSS file name_01'), 'css_name', STEXT_LEN), array('EXIST_CHECK', 'SPTAB_CHECK', 'MAX_LENGTH_CHECK', 'FILE_NAME_CHECK_BY_NOUPLOAD')); $device_type_id = $objFormParam->getValue('device_type_id'); $css_name = $objFormParam->getValue('css_name'); $old_css_name = $objFormParam->getValue('old_css_name', $css_name); $is_error = false; // 重複チェック if (!SC_Utils_Ex::isBlank($objErr->arrErr['css_name'])) { $arrCSSList = $this->getCSSList($this->getCSSDir()); foreach ($arrCSSList as $val) { if ($val['css_name'] == $css_name) { if (SC_Utils_Ex::isBlank($old_css_name) || $old_css_name != $css_name) { $is_error = true; } } } if ($is_error) { $objErr->arrErr['css_name'] = t('c_* Data for the same file name exists. Enter a different file name.<br />_01'); } } return $objErr->arrErr; }
/** * 受注データを取得して, SC_FormParam へ設定する. * * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @param integer $order_id 取得元の受注ID * @return void */ function setOrderToFormParam(&$objFormParam, $order_id) { $objPurchase = new SC_Helper_Purchase_Ex(); // 受注詳細を設定 $arrOrderDetail = $objPurchase->getOrderDetail($order_id, false); $objFormParam->setParam(SC_Utils_Ex::sfSwapArray($arrOrderDetail)); $arrShippingsTmp = $objPurchase->getShippings($order_id); $arrShippings = array(); foreach ($arrShippingsTmp as $row) { // お届け日の処理 if (!SC_Utils_Ex::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->setValue('shipping_quantity', count($arrShippings)); $objFormParam->setParam(SC_Utils_Ex::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); $objFormParam->setParam($arrOrder); // ポイントを設定 list($db_point, $rollback_point) = SC_Helper_DB_Ex::sfGetRollbackPoint($order_id, $arrOrder['use_point'], $arrOrder['add_point'], $arrOrder['status']); $objFormParam->setValue('total_point', $db_point); $objFormParam->setValue('point', $rollback_point); if (!SC_Utils_Ex::isBlank($objFormParam->getValue('customer_id'))) { $arrCustomer = SC_Helper_Customer_Ex::sfGetCustomerDataFromId($objFormParam->getValue('customer_id')); $objFormParam->setValue('customer_point', $arrCustomer['point']); } }
/** * * テンプレートの文言をフォームに入れる。 * @param SC_FormParam $objFormParam */ function changeData(&$objFormParam) { if (SC_Utils_Ex::sfIsInt($objFormParam->getValue('template_id'))) { $objQuery =& SC_Query_Ex::getSingletonInstance(); $where = 'template_id = ?'; $mailTemplates = $objQuery->select('subject, header, footer', 'dtb_mailtemplate', $where, array($objFormParam->getValue('template_id'))); if (!is_null($mailTemplates)) { foreach (array('subject', 'header', 'footer') as $key) { $objFormParam->setValue($key, $mailTemplates[$key]); } } $objFormParam->setParam($mailTemplates[0]); } else { foreach (array('subject', 'header', 'footer') as $key) { $objFormParam->setValue($key, ''); } } return $objFormParam; }