[Svn-src-all:1530] [version-2_5-dev 20426] refs #982 #1007
shutta
admin @ mail.ec-cube.net
2011年 2月 27日 (日) 00:30:27 JST
Subversion committed to /home/svn/open 20426
http://svn.ec-cube.net/open_trac/changeset/20426
┌────────────────────────────┐
│更新者 : shutta │
│更新日時: 2011-02-27 00:30:27 +0900 (日, 27 2月 2011)│
└────────────────────────────┘
Log:
--------------------------------------------------------
refs #982 #1007
商品レビュー書き込みページのリファクタリング。(for #982)
lfConvertParamの廃止(for #1007)
Changed: [U:修正,A:追加,D:削除]
--------------------------------------------------------
U branches/version-2_5-dev/data/class/pages/products/LC_Page_Products_Review.php
変更: branches/version-2_5-dev/data/class/pages/products/LC_Page_Products_Review.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/products/LC_Page_Products_Review.php 2011-02-26 14:37:06 UTC (rev 20425)
+++ branches/version-2_5-dev/data/class/pages/products/LC_Page_Products_Review.php 2011-02-26 15:30:27 UTC (rev 20426)
@@ -78,94 +78,49 @@
* @return void
*/
function action() {
- $objQuery = new SC_Query();
+ $objFormParam = new SC_FormParam();
+ $this->lfInitParam($objFormParam);
+ $objFormParam->setParam($_POST);
+ $objFormParam->convParam();
- //---- 登録用カラム配列
- $arrRegistColumn = array(
- array( "column" => "review_id", "convert" => "aKV" ),
- array( "column" => "product_id", "convert" => "aKV" ),
- array( "column" => "reviewer_name", "convert" => "aKV" ),
- array( "column" => "reviewer_url", "convert" => "a"),
- array( "column" => "sex", "convert" => "n" ),
- array( "column" => "email", "convert" => "a" ),
- array( "column" => "recommend_level", "convert" => "n" ),
- array( "column" => "title", "convert" => "aKV" ),
- array( "column" => "comment", "convert" => "aKV" ),
-
- );
-
switch ($this->getMode()){
case 'confirm':
- $arrForm = $this->lfConvertParam($_POST, $arrRegistColumn);
- $this->arrErr = $this->lfErrorCheck($arrForm);
- //重複メッセージの判定
- $flag = $objQuery->count("dtb_review","product_id = ? AND title = ? ", array($arrForm['product_id'], $arrForm['title']));
+ $this->arrErr = $this->lfCheckError($objFormParam);
- if ($flag > 0){
- $this->arrErr['title'] .= "重複したタイトルは登録できません。";
- }
-
//エラーチェック
if (empty($this->arrErr)) {
//重複タイトルでない
- if($flag == 0){
- //商品名の取得
- $arrForm['name'] = $objQuery->get("name", "dtb_products", "product_id = ? ", array($arrForm['product_id']));
- $this->arrForm = $arrForm;
- $this->tpl_mainpage = 'products/review_confirm.tpl';
- }
- } else {
- //商品名の取得
- $arrForm['name'] = $objQuery->get("name", "dtb_products", "product_id = ? ", array($arrForm['product_id']));
- $this->arrForm = $arrForm;
+ $this->tpl_mainpage = 'products/review_confirm.tpl';
}
break;
case 'return':
- foreach($_POST as $key => $val){
- $this->arrForm[ $key ] = $val;
- }
-
- //商品名の取得
- $this->arrForm['name'] = $objQuery->get("name", "dtb_products", "product_id = ? ", array($this->arrForm['product_id']));
- if(empty($this->arrForm['name'])) {
- SC_Utils_Ex::sfDispSiteError(PAGE_ERROR);
- }
break;
case 'complete':
- $arrForm = $this->lfConvertParam($_POST, $arrRegistColumn);
- $arrErr = $this->lfErrorCheck($arrForm);
- //重複メッセージの判定
- $flag = $objQuery->count("dtb_review","product_id = ? AND title = ? ", array($arrForm['product_id'], $arrForm['title']));
+ $this->arrErr = $this->lfCheckError($objFormParam);
//エラーチェック
if (empty($this->arrErr)) {
- //重複タイトルでない
- if($flag == 0) {
- //登録実行
- $this->lfRegistRecommendData($arrForm, $arrRegistColumn);
- //レビュー書き込み完了ページへ
- SC_Response_Ex::sendRedirect('review_complete.php');
- exit;
- }
- } else {
- if($flag > 0) {
- SC_Utils_Ex::sfDispSiteError(PAGE_ERROR);
- }
+ //登録実行
+ $this->lfRegistRecommendData($objFormParam);
+
+ //レビュー書き込み完了ページへ
+ SC_Response_Ex::sendRedirect('review_complete.php');
+ exit;
}
break;
default:
- if(SC_Utils_Ex::sfIsInt($_GET['product_id'])) {
- //商品情報の取得
- $arrForm = $objQuery->select("product_id, name", "dtb_products", "del_flg = 0 AND status = 1 AND product_id=?", array($_GET['product_id']));
- if(empty($arrForm)) {
- SC_Utils_Ex::sfDispSiteError(PAGE_ERROR);
- }
- $this->arrForm = $arrForm[0];
- }
- break;
+ // 最初のproduct_idは、$_GETで渡ってくる。
+ $objFormParam->setParam($_GET);
+ }
+ $this->arrForm = $objFormParam->getHashArray();
+
+ //商品名の取得
+ $this->arrForm['name'] = $this->lfGetProductName($this->arrForm['product_id']);
+ if (empty($this->arrForm['name'])) {
+ SC_Utils_Ex::sfDispSiteError(PAGE_ERROR);
}
$this->setTemplate($this->tpl_mainpage);
@@ -180,62 +135,73 @@
parent::destroy();
}
- //エラーチェック
+ /**
+ * パラメータ情報の初期化を行う.
+ *
+ * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+ * @return void
+ */
+ function lfInitParam(&$objFormParam) {
+ $objFormParam->addParam("レビューID", "review_id", INT_LEN, "aKV");
+ $objFormParam->addParam("商品ID", "product_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK"));
+ $objFormParam->addParam("投稿者名", "reviewer_name", STEXT_LEN, "aKV", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+ $objFormParam->addParam("投稿者URL", "reviewer_url", MTEXT_LEN, "a", array("NO_SPTAB", "SPTAB_CHECK", "MAX_LENGTH_CHECK", "URL_CHECK"));
+ $objFormParam->addParam("性別", "sex", INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK"));
+ $objFormParam->addParam("おすすめレベル", "recommend_level", INT_LEN, "n", array("EXIST_CHECK", "SELECT_CHECK"));
+ $objFormParam->addParam("タイトル", "title", STEXT_LEN, "aKV", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+ $objFormParam->addParam("コメント", "comment", LTEXT_LEN, "aKV", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+ }
- function lfErrorCheck() {
- $objErr = new SC_CheckError();
- $objErr->doFunc(array("商品ID", "product_id", INT_LEN), array("EXIST_CHECK", "MAX_LENGTH_CHECK"));
- $objErr->doFunc(array("投稿者名", "reviewer_name", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
- $objErr->doFunc(array("投稿者URL", "reviewer_url", MTEXT_LEN), array("NO_SPTAB", "SPTAB_CHECK", "MAX_LENGTH_CHECK", "URL_CHECK"));
- $objErr->doFunc(array("おすすめレベル", "recommend_level"), array("SELECT_CHECK"));
- $objErr->doFunc(array("タイトル", "title", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
- $objErr->doFunc(array("コメント", "comment", LTEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
+ /**
+ * 入力内容のチェックを行う.
+ *
+ * @param SC_FormParam $objFormParam SC_FormParam インスタンス
+ * @return array エラーメッセージの配列
+ */
+ function lfCheckError(&$objFormParam) {
+ $arrErr = $objFormParam->checkError();
+ $arrForm = $objFormParam->getHashArray();
+
+ //重複メッセージの判定
+ $objQuery =& SC_Query::getSingletonInstance();
+ $flag = $objQuery->count("dtb_review","product_id = ? AND title = ? ", array($arrForm['product_id'], $arrForm['title']));
+ if ($flag > 0){
+ $arrErr['title'] .= "重複したタイトルは登録できません。";
+ }
+
if (REVIEW_ALLOW_URL == false) {
+ $objErr = new SC_CheckError($objFormParam->getHashArray());
// コメント欄へのURLの入力を禁止
$objErr->doFunc(array("URL", "comment", $this->arrReviewDenyURL), array("PROHIBITED_STR_CHECK"));
+ $arrErr += $objErr->arrErr;
}
- return $objErr->arrErr;
+ return $arrErr;
}
- //---- 取得文字列の変換
- function lfConvertParam($array, $arrRegistColumn) {
- /*
- * 文字列の変換
- * K : 「半角(ハンカク)片仮名」を「全角片仮名」に変換
- * C : 「全角ひら仮名」を「全角かた仮名」に変換
- * V : 濁点付きの文字を一文字に変換。"K","H"と共に使用します
- * n : 「全角」数字を「半角(ハンカク)」に変換
- * a : 全角英数字を半角英数字に変換する
- */
- // カラム名とコンバート情報
- foreach ($arrRegistColumn as $data) {
- $arrConvList[ $data["column"] ] = $data["convert"];
- }
- // 文字変換
- foreach ($arrConvList as $key => $val) {
- // POSTされてきた値のみ変換する。
- if(!empty($array[$key])) {
- $array[$key] = mb_convert_kana($array[$key] ,$val);
- }
- }
- return $array;
+ /**
+ * 商品名を取得
+ *
+ * @param integer $product_id 商品ID
+ * @return string $product_name 商品名
+ */
+ function lfGetProductName($product_id) {
+ $objQuery =& SC_Query::getSingletonInstance();
+
+ return $objQuery->get("name", "dtb_products", "product_id = ? ", array($product_id));
}
//登録実行
- function lfRegistRecommendData ($array, $arrRegistColumn) {
- // 仮登録
- foreach ($arrRegistColumn as $data) {
- if (strlen($array[ $data["column"] ]) > 0 ) {
- $arrRegist[ $data["column"] ] = $array[ $data["column"] ];
- }
- }
+ function lfRegistRecommendData (&$objFormParam) {
+ $objQuery =& SC_Query::getSingletonInstance();
+ $arrRegist = $objFormParam->getDbArray();
+
$arrRegist['create_date'] = 'now()';
$arrRegist['update_date'] = 'now()';
$arrRegist['creator_id'] = '0';
+
//-- 登録実行
- $objQuery = new SC_Query();
$objQuery->begin();
$arrRegist['review_id'] = $objQuery->nextVal('dtb_review_review_id');
$objQuery->insert("dtb_review", $arrRegist);
Svn-src-all メーリングリストの案内