Changeset 20265
- Timestamp:
- 2011/02/20 20:25:16 (12 years ago)
- Location:
- branches/version-2_5-dev/data
- Files:
-
- 4 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_5-dev/data/Smarty/templates/admin/contents/index.tpl
r20116 r20265 119 119 <td> 120 120 <!--{if $arrErr.year || $arrErr.month || $arrErr.day}--><span class="attention"><!--{$arrErr.year}--><!--{$arrErr.month}--><!--{$arrErr.day}--></span><!--{/if}--> 121 <select name="year" <!--{if $arrErr.year }-->style="background-color:<!--{$smarty.const.ERR_COLOR|h}-->"<!--{/if}-->>121 <select name="year" <!--{if $arrErr.year || $arrErr.month || $arrErr.day }-->style="background-color:<!--{$smarty.const.ERR_COLOR|h}-->"<!--{/if}-->> 122 122 <option value="" selected>----</option> 123 123 <!--{html_options options=$arrYear selected=$arrForm.year}--> 124 124 </select>年 125 <select name="month" <!--{if $arrErr. month}-->style="background-color:<!--{$smarty.const.ERR_COLOR|h}-->"<!--{/if}-->>125 <select name="month" <!--{if $arrErr.year || $arrErr.month || $arrErr.day}-->style="background-color:<!--{$smarty.const.ERR_COLOR|h}-->"<!--{/if}-->> 126 126 <option value="" selected>--</option> 127 127 <!--{html_options options=$arrMonth selected=$arrForm.month}--> 128 128 </select>月 129 <select name="day" <!--{if $arrErr. day}-->style="background-color:<!--{$smarty.const.ERR_COLOR|h}-->"<!--{/if}-->>129 <select name="day" <!--{if $arrErr.year || $arrErr.month || $arrErr.day}-->style="background-color:<!--{$smarty.const.ERR_COLOR|h}-->"<!--{/if}-->> 130 130 <option value="" selected>--</option> 131 131 <!--{html_options options=$arrDay selected=$arrForm.day}--> -
branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents.php
r20116 r20265 54 54 ); 55 55 $this->tpl_subtitle = '新着情報管理'; 56 //---- 日付プルダウン設定 57 $objDate = new SC_Date(ADMIN_NEWS_STARTYEAR); 58 $this->arrYear = $objDate->getYear(); 59 $this->arrMonth = $objDate->getMonth(); 60 $this->arrDay = $objDate->getDay(); 56 61 } 57 62 … … 72 77 */ 73 78 function action() { 74 75 //---- ページ初期設定 76 $objQuery = new SC_Query(); 77 $objDate = new SC_Date(ADMIN_NEWS_STARTYEAR); 78 $objDb = new SC_Helper_DB_Ex(); 79 79 // アクセス権があるかを判定し、ない場合はエラー画面を表示する。 80 80 SC_Utils_Ex::sfIsSuccess(new SC_Session()); 81 82 //---- 日付プルダウン設定 83 $this->arrYear = $objDate->getYear(); 84 $this->arrMonth = $objDate->getMonth(); 85 $this->arrDay = $objDate->getDay(); 81 82 $objDb = new SC_Helper_DB_Ex(); 83 $objFormParam = new SC_FormParam(); 84 $this->lfInitParam($objFormParam); 85 $objFormParam->setParam($_POST); 86 $objFormParam->convParam(); 87 $news_id = $objFormParam->getValue('news_id'); 86 88 87 89 //---- 新規登録/編集登録 88 90 switch ($this->getMode()) { 89 91 case 'regist': 90 $_POST = $this->lfConvData($_POST); 91 92 if ($this->arrErr = $this->lfErrorCheck()) { // 入力エラーのチェック 93 $this->arrForm = $_POST; 92 $arrPost = $objFormParam->getHashArray(); 93 $this->arrErr = $this->lfCheckError(&$objFormParam); 94 if (SC_Utils_Ex::isBlank($this->arrErr)) { 95 // ニュースIDの値がPOSTされて来た場合は既存データの編集とみなし、 96 // 更新メソッドを呼び出す。 97 // ニュースIDが存在しない場合は新規登録を行う。 98 $arrPost['link_method'] = $this->checkLinkMethod($arrPost['link_method']); 99 $arrPost['news_date'] = $this->getRegistDate($arrPost); 100 $member_id = $_SESSION['member_id']; 101 if (strlen($news_id) > 0 && is_numeric($news_id)) { 102 $this->lfNewsUpdate($arrPost,$member_id); 103 } else { 104 $this->lfNewsInsert($arrPost,$member_id); 105 } 106 $this->tpl_onload = "window.alert('編集が完了しました');"; 94 107 } else { 95 96 if (isset($_POST['link_method']) == ""){ 97 $_POST['link_method'] = 1; 98 } 99 100 $this->registDate = $_POST['year'] ."/". $_POST['month'] ."/". $_POST['day']; 101 102 //-- 編集登録 103 if (strlen($_POST["news_id"]) > 0 && is_numeric($_POST["news_id"])) { 104 105 $this->lfNewsUpdate($objQuery); 106 107 //-- 新規登録 108 } else { 109 $this->lfNewsInsert($objQuery); 110 } 111 112 $this->tpl_onload = "window.alert('編集が完了しました');"; 108 $this->arrForm = $arrPost; 113 109 } 114 110 break; 115 111 case 'search': 116 //---- 編集データ取得 117 if (is_numeric($_POST["news_id"])) { 118 $sql = "SELECT *, cast(news_date as date) as cast_news_date FROM dtb_news WHERE news_id = ? "; 119 $result = $objQuery->getAll($sql, array($_POST["news_id"])); 120 $this->arrForm = $result[0]; 121 122 $arrData = split("-", $result[0]["cast_news_date"]); 123 $this->arrForm['year'] = $arrData[0]; 124 $this->arrForm['month'] = $arrData[1]; 125 $this->arrForm['day'] = $arrData[2]; 126 112 if (is_numeric($news_id)) { 113 list($this->arrForm) = $this->getNews($news_id); 114 list($this->arrForm['year'],$this->arrForm['month'],$this->arrForm['day']) = $this->splitNewsDate($this->arrForm['cast_news_date']); 127 115 $this->edit_mode = "on"; 128 116 } … … 130 118 case 'delete': 131 119 //---- データ削除 132 if (is_numeric($_POST["news_id"])) { 133 // rankを取得 134 $pre_rank = $objQuery->getOne(" SELECT rank FROM dtb_news WHERE del_flg = 0 AND news_id = ? ", array( $_POST['news_id'] )); 135 136 //-- 削除する新着情報以降のrankを1つ繰り上げておく 137 $objQuery->begin(); 138 $sql = "UPDATE dtb_news SET rank = rank - 1, update_date = NOW() WHERE del_flg = 0 AND rank > ?"; 139 $objQuery->query( $sql, array( $pre_rank ) ); 140 141 $sql = "UPDATE dtb_news SET rank = 0, del_flg = 1, update_date = NOW() WHERE news_id = ?"; 142 $objQuery->query( $sql, array( $_POST['news_id'] ) ); 143 $objQuery->commit(); 144 120 if (is_numeric($news_id)) { 121 $this->p($news_id); 122 $pre_rank = $this->getRankByNewsId($news_id); 123 $this->computeRankForDelete($news_id,$pre_rank); 145 124 $this->objDisplay->reload(); //自分にリダイレクト(再読込による誤動作防止) 146 125 } … … 148 127 case 'move': 149 128 //---- 表示順位移動 150 if (is_numeric($_POST["news_id"]) ) { 151 if ($_POST["term"] == "up") { 152 $objDb->sfRankUp("dtb_news", "news_id", $_POST["news_id"]); 153 } else if ($_POST["term"] == "down") { 154 $objDb->sfRankDown("dtb_news", "news_id", $_POST["news_id"]); 129 if (strlen($news_id) > 0 && is_numeric($news_id) == true ) { 130 $term = $objFormParam->getValue('term'); 131 if ($term == "up") { 132 $objDb->sfRankUp("dtb_news", "news_id", $news_id); 133 } else if ($term == "down") { 134 $objDb->sfRankDown("dtb_news", "news_id", $news_id); 155 135 } 156 //sf_rebuildIndex($conn);157 136 $this->objDisplay->reload(); 158 137 } … … 160 139 case 'moveRankSet': 161 140 //---- 指定表示順位移動 162 $key = "pos-".$_POST['news_id']; 163 $input_pos = mb_convert_kana($_POST[$key], "n"); 141 $input_pos = $this->getPostRank($objFormParam,$news_id); 164 142 if(SC_Utils_Ex::sfIsInt($input_pos)) { 165 $objDb->sfMoveRank("dtb_news", "news_id", $ _POST['news_id'], $input_pos);143 $objDb->sfMoveRank("dtb_news", "news_id", $news_id, $input_pos); 166 144 $this->objDisplay->reload(); 167 145 } … … 171 149 } 172 150 173 //---- 全データ取得 174 $sql = "SELECT *, cast(news_date as date) as cast_news_date FROM dtb_news WHERE del_flg = '0' ORDER BY rank DESC"; 175 $this->list_data = $objQuery->getAll($sql); 151 $this->list_data = $this->getNews(); 176 152 $this->line_max = count($this->list_data); 177 $sql = "SELECT MAX(rank) FROM dtb_news WHERE del_flg = '0'"; // rankの最大値を取得 178 $this->max_rank = $objQuery->getOne($sql); 153 $this->max_rank = $this->getRankMax(); 179 154 } 180 155 … … 189 164 } 190 165 191 192 //---- 入力文字列を配列へ 193 function lfConvData( $data ){ 194 195 // 文字列の変換(mb_convert_kanaの変換オプション) 196 $arrFlag = array( 197 "year" => "n" 198 ,"month" => "n" 199 ,"day" => "n" 200 ,"url" => "a" 201 ,"news_title" => "aKV" 202 ,"news_comment" => "aKV" 203 ,"link_method" => "n" 204 ); 205 206 if ( is_array($data) ){ 207 foreach ($arrFlag as $key=>$line) { 208 $data[$key] = isset($data[$key]) 209 ? mb_convert_kana($data[$key], $line) 210 : ""; 211 } 166 /** 167 * 入力されたパラメータのエラーチェックを行う。 168 * @param Object $objFormParam 169 * @return Array エラー内容 170 */ 171 function lfCheckError(&$objFormParam){ 172 $objErr = new SC_CheckError($objFormParam->getHashArray()); 173 $objErr->arrErr = $objFormParam->checkError(); 174 $objErr->doFunc(array("日付", "year", "month", "day"), array("CHECK_DATE")); 175 return $objErr->arrErr; 176 } 177 178 179 /** 180 * パラメータの初期化を行う 181 * @param Object $objFormParam 182 */ 183 function lfInitParam(&$objFormParam){ 184 $objFormParam->addParam("news_id", 'news_id'); 185 $objFormParam->addParam("日付(年)", "year", INT_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 186 $objFormParam->addParam("日付(月)", "month", INT_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 187 $objFormParam->addParam("日付(日)", "day", INT_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 188 $objFormParam->addParam("タイトル", 'news_title', MTEXT_LEN, "KVa", array("EXIST_CHECK","MAX_LENGTH_CHECK","SPTAB_CHECK")); 189 $objFormParam->addParam("URL", 'news_url', URL_LEN, "KVa", array("MAX_LENGTH_CHECK")); 190 $objFormParam->addParam("本文", 'news_comment', LTEXT_LEN, "KVa", array("MAX_LENGTH_CHECK")); 191 $objFormParam->addParam("別ウィンドウで開く", 'link_method', INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 192 $objFormParam->addParam("ランク移動", 'term', INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 193 } 194 195 /** 196 * 新着記事のデータの登録を行う 197 * @param Array $arrPost POSTデータの配列 198 * @param Integer $member_id 登録した管理者のID 199 */ 200 function lfNewsInsert($arrPost,$member_id){ 201 $objQuery = $objQuery =& SC_Query::getSingletonInstance(); 202 203 // rankの最大+1を取得する 204 $rank_max = $this->getRankMax(); 205 $rank_max = $rank_max + 1; 206 207 $table = 'dtb_news'; 208 $sqlval = array(); 209 $news_id = $objQuery->nextVal('dtb_news_news_id'); 210 $sqlval['news_id'] = $news_id; 211 $sqlval['news_date'] = $arrPost['news_date']; 212 $sqlval['news_title'] = $arrPost['news_title']; 213 $sqlval['creator_id'] = $member_id; 214 $sqlval['news_url'] = $arrPost['news_url']; 215 $sqlval['link_method'] = $arrPost['link_method']; 216 $sqlval['news_comment'] = $arrPost['news_comment']; 217 $sqlval['rank'] = $rank_max; 218 $sqlval['create_date'] = 'now()'; 219 $sqlval['update_date'] = 'now()'; 220 $objQuery->insert($table, $sqlval); 221 222 // 最初の1件目の登録はrankにNULLが入るので対策 223 $sqlval = array(); 224 $sqlval['rank'] = 1; 225 $where = ' del_flg = 0 AND rank IS NULL'; 226 $objQuery->update($table, $sqlval, $where); 227 } 228 229 230 function lfNewsUpdate($arrPost,$member_id){ 231 $objQuery = $objQuery =& SC_Query::getSingletonInstance(); 232 233 $table = 'dtb_news'; 234 $sqlval = array(); 235 $sqlval['news_date'] = $arrPost['news_date']; 236 $sqlval['news_title'] = $arrPost['news_title']; 237 $sqlval['creator_id'] = $member_id; 238 $sqlval['news_url'] = $arrPost['news_url']; 239 $sqlval['news_comment'] = $arrPost['news_comment']; 240 $sqlval['link_method'] = $arrPost['link_method']; 241 $sqlval['update_date'] = 'NOW()'; 242 $where = 'news_id = ?'; 243 $arrValIn = array($arrPost['news_id']); 244 $objQuery->update($table, $sqlval, $where, $arrValIn); 245 } 246 247 /** 248 * データの登録日を返す。 249 * @param Array $arrPost POSTのグローバル変数 250 * @return string 登録日を示す文字列 251 */ 252 function getRegistDate($arrPost){ 253 $registDate = $arrPost['year'] ."/". $arrPost['month'] ."/". $arrPost['day']; 254 return $registDate; 255 } 256 257 258 /** 259 * チェックボックスの値が空の時は無効な値として1を格納する 260 * @param int $link_method 261 * @return int 262 */ 263 function checkLinkMethod($link_method){ 264 if(strlen($link_method) == 0){ 265 $link_method = 1; 212 266 } 213 214 return $data; 215 } 216 217 //---- 入力エラーチェック 218 function lfErrorCheck(){ 219 220 $objErr = new SC_CheckError(); 221 222 $objErr->doFunc(array("日付(年)", "year"), array("EXIST_CHECK")); 223 $objErr->doFunc(array("日付(月)", "month"), array("EXIST_CHECK")); 224 $objErr->doFunc(array("日付(日)", "day"), array("EXIST_CHECK")); 225 $objErr->doFunc(array("日付", "year", "month", "day"), array("CHECK_DATE")); 226 $objErr->doFunc(array("タイトル", 'news_title', MTEXT_LEN), array("EXIST_CHECK","MAX_LENGTH_CHECK")); 227 $objErr->doFunc(array("本文", 'url', URL_LEN), array("MAX_LENGTH_CHECK")); 228 $objErr->doFunc(array("本文", 'news_comment', LTEXT_LEN), array("MAX_LENGTH_CHECK")); 229 230 return $objErr->arrErr; 231 } 232 233 //INSERT文 234 function lfNewsInsert(&$objQuery){ 235 236 if ($_POST["link_method"] == "") { 237 $_POST["link_method"] = 1; 267 return $link_method; 268 } 269 270 /** 271 * ニュース記事を取得する。 272 * @param Integer news_id ニュースID 273 */ 274 function getNews($news_id = ''){ 275 $objQuery = $objQuery =& SC_Query::getSingletonInstance(); 276 $col = '*, cast(news_date as date) as cast_news_date'; 277 $table = 'dtb_news'; 278 $order = 'rank DESC'; 279 if(strlen($news_id) == 0){ 280 $where = 'del_flg = 0'; 281 $arrval = array(); 282 }else{ 283 $where = 'del_flg = 0 AND news_id = ?'; 284 $arrval = array($news_id); 238 285 } 239 240 //rankの最大+1を取得する 241 $rank_max = $objQuery->getOne("SELECT MAX(rank) + 1 FROM dtb_news WHERE del_flg = '0'"); 242 243 $sql = "INSERT INTO dtb_news (news_id, news_date, news_title, creator_id, news_url, link_method, news_comment, rank, create_date, update_date) 244 VALUES (?,?,?,?,?,?,?,?,now(),now())"; 245 $arrRegist = array($objQuery->nextVal('dtb_news_news_id'), $this->registDate, $_POST["news_title"], $_SESSION['member_id'], $_POST["news_url"], $_POST["link_method"], $_POST["news_comment"], $rank_max); 246 247 $objQuery->query($sql, $arrRegist); 248 249 // 最初の1件目の登録はrankにNULLが入るので対策 250 $sql = "UPDATE dtb_news SET rank = 1 WHERE del_flg = 0 AND rank IS NULL"; 251 $objQuery->query($sql); 252 } 253 254 function lfNewsUpdate(&$objQuery){ 255 256 if ($_POST["link_method"] == "") { 257 $_POST["link_method"] = 1; 286 $objQuery->setOrder($order); 287 return $objQuery->select($col, $table, $where,$arrval); 288 } 289 290 /** 291 * 指定されたニュースのランクの値を取得する。 292 * @param Integer $news_id 293 */ 294 function getRankByNewsId($news_id){ 295 $objQuery = $objQuery =& SC_Query::getSingletonInstance(); 296 $col = 'rank'; 297 $table = 'dtb_news'; 298 $where = 'del_flg = 0 AND news_id = ?'; 299 $arrval = array($news_id); 300 list($rank) = $objQuery->select($col, $table, $where, $arrval); 301 return $rank['rank']; 302 } 303 304 /** 305 * 削除する新着情報以降のrankを1つ繰り上げる。 306 * @param Integer $news_id 307 * @param Integer $rank 308 */ 309 function computeRankForDelete($news_id,$rank){ 310 $objQuery = $objQuery =& SC_Query::getSingletonInstance(); 311 $objQuery->begin(); 312 $table = 'dtb_news'; 313 $sqlval = array(); 314 $sqlval['rank'] = $rank; 315 $sqlval['update_date'] = 'NOW()'; 316 $where = 'del_flg = 0 AND rank > ?'; 317 $arrValIn = array($rank); 318 $objQuery->update($table, $sqlval, $where, $arrValIn); 319 320 $sqlval = array(); 321 $sqlval['rank'] = '0'; 322 $sqlval['del_flg'] = '1'; 323 $sqlval['update_date'] = 'NOW()'; 324 $where = 'news_id = ?'; 325 $arrValIn = array($news_id); 326 $objQuery->update($table, $sqlval, $where, $arrValIn); 327 $objQuery->commit(); 328 } 329 330 /** 331 * ニュースの日付の値をフロントでの表示形式に合わせるために分割 332 * @param String $news_date 333 */ 334 function splitNewsDate($news_date){ 335 return split("-", $news_date); 336 } 337 338 339 /** 340 * ランクの最大値の値を返す。 341 * @return Intger $max ランクの最大値の値 342 */ 343 function getRankMax(){ 344 $objQuery =& SC_Query::getSingletonInstance(); 345 $col = 'MAX(rank)'; 346 $table = 'dtb_news'; 347 $where = 'del_flg = 0'; 348 list($result) = $objQuery->select($col, $table, $where); 349 return $result['max']; 350 } 351 352 /** 353 * POSTされたランクの値を取得する 354 * @param Object $objFormParam 355 * @param Integer $news_id 356 */ 357 function getPostRank($news_id){ 358 if(strlen($news_id) > 0 && is_numeric($news_id) == true){ 359 $key = "pos-".$news_id; 360 $input_pos = $_POST[$key]; 361 return $input_pos; 258 362 } 259 260 $sql = "UPDATE dtb_news SET news_date = ?, news_title = ?, creator_id = ?, update_date = NOW(), news_url = ?, link_method = ?, news_comment = ? WHERE news_id = ?"; 261 $arrRegist = array($this->registDate, $_POST['news_title'], $_SESSION['member_id'], $_POST['news_url'], $_POST["link_method"], $_POST['news_comment'], $_POST['news_id']); 262 263 $objQuery->query($sql, $arrRegist); 264 } 363 } 364 265 365 } 266 366 ?> -
branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_Recommend.php
r20203 r20265 44 44 function init() { 45 45 parent::init(); 46 $this->tpl_mainpage = 'contents/recom end.tpl';46 $this->tpl_mainpage = 'contents/recommend.tpl'; 47 47 $this->tpl_mainno = 'contents'; 48 48 $this->tpl_subnavi = 'contents/subnavi.tpl'; 49 49 $this->tpl_subno = "recommend"; 50 50 $this->tpl_subtitle = 'おすすめ商品管理'; 51 //最大登録数の表示 52 $this->tpl_disp_max = RECOMMEND_NUM; 51 53 } 52 54 … … 67 69 */ 68 70 function action() { 69 $objQuery = new SC_Query();70 $objSess = new SC_Session();71 72 $arrRegistColumn = array(73 array( "column" => "product_id", "convert" => "n" ),74 array( "column" => "category_id", "convert" => "n" ),75 array( "column" => "rank", "convert" => "n" ),76 array( "column" => "comment", "convert" => "aKV" ),77 );78 79 71 // 認証可否の判定 80 SC_Utils_Ex::sfIsSuccess($objSess); 81 82 //最大登録数の表示 83 $this->tpl_disp_max = RECOMMEND_NUM; 84 85 if (!isset($_POST['category_id'])) $_POST['category_id'] = ""; 86 //TODO: 要リファクタリング(MODE switch 2か所で行われている) 72 SC_Utils_Ex::sfIsSuccess(new SC_Session()); 73 $objFormParam = new SC_FormParam(); 74 $this->lfInitParam($objFormParam); 75 $objFormParam->setParam($_POST); 76 $objFormParam->convParam(); 77 87 78 switch ($this->getMode()) { 88 case 'regist': 89 // 登録時 90 // 入力文字の強制変換 91 $this->arrForm = $_POST; 92 $this->arrForm = $this->lfConvertParam($this->arrForm, $arrRegistColumn); 93 // エラーチェック 94 $this->arrErr[$this->arrForm['rank']] = $this->lfErrorCheck(); 95 if ( ! $this->arrErr[$this->arrForm['rank']]) { 96 // 古いのを消す 97 $sql = "DELETE FROM dtb_best_products WHERE category_id = ? AND rank = ?"; 98 $objQuery->query($sql, array($this->arrForm['category_id'] ,$this->arrForm['rank'])); 99 100 // DB登録 101 $this->arrForm['creator_id'] = $_SESSION['member_id']; 102 $this->arrForm['update_date'] = "NOW()"; 103 $this->arrForm['create_date'] = "NOW()"; 104 $this->arrForm['best_id'] = $objQuery->nextVal('dtb_best_products_best_id'); 105 $objQuery->insert("dtb_best_products", $this->arrForm ); 106 } 107 break; 108 case 'delete': 109 // 削除時 110 $sql = "DELETE FROM dtb_best_products WHERE category_id = ? AND rank = ?"; 111 $objQuery->query($sql, array($_POST['category_id'] ,$_POST['rank'])); 79 case 'regist': // 商品を登録する。 80 $this->arrErr = $this->lfCheckError(&$objFormParam); 81 $arrPost = $objFormParam->getHashArray(); 82 // 登録処理にエラーがあった場合は商品選択の時と同じ処理を行う。 83 if (SC_Utils_Ex::isBlank($this->arrErr)) { 84 $member_id = $_SESSION['member_id']; 85 $this->insertRecommendProduct($arrPost,$member_id); 86 $arrItems = $this->getRecommendProducts(); 87 }else{ 88 $arrItems = $this->setProducts($arrPost, $arrItems); 89 $this->checkRank = $arrPost['rank']; 90 } 91 $this->tpl_onload = "window.alert('編集が完了しました');"; 92 break; 93 case 'delete': // 商品を削除する。 94 $this->arrErr = $this->lfCheckError(&$objFormParam); 95 $arrPost = $objFormParam->getHashArray(); 96 if (SC_Utils_Ex::isBlank($this->arrErr)) { 97 $this->deleteProduct($arrPost); 98 $arrItems = $this->getRecommendProducts(); 99 } 100 $this->tpl_onload = "window.alert('削除しました');"; 101 break; 102 case 'set_item': // 商品を選択する。 103 $this->arrErr = $this->lfCheckError(&$objFormParam); 104 $arrPost = $objFormParam->getHashArray(); 105 if (SC_Utils_Ex::isBlank($this->arrErr['rank']) && SC_Utils_Ex::isBlank($this->arrErr['product_id'])) { 106 $arrItems = $this->setProducts($arrPost, $this->getRecommendProducts()); 107 $this->checkRank = $arrPost['rank']; 108 } 112 109 break; 113 110 default: 114 break; 115 } 116 117 // カテゴリID取得 無いときはトップページ 118 if ( SC_Utils_Ex::sfIsInt($_POST['category_id']) ){ 119 $this->category_id = $_POST['category_id']; 120 } else { 121 $this->category_id = 0; 122 } 123 124 // 既に登録されている内容を取得する 125 $sql = "SELECT B.name, B.main_list_image, A.* FROM dtb_best_products as A INNER JOIN dtb_products as B USING (product_id) 126 WHERE A.del_flg = 0 ORDER BY rank"; 127 $arrItems = $objQuery->getAll($sql); 128 foreach( $arrItems as $data ){ 129 $this->arrItems[$data['rank']] = $data; 130 } 131 132 // 商品変更時 or 登録エラー時は、選択された商品に一時的に置き換える 133 //TODO: 要リファクタリング(MODE switch 2か所で行われている) 134 switch ($this->getMode()) { 135 case 'set_item': 136 case 'regist': 137 if (!empty($this->arrErr[$this->arrForm['rank']])) { 138 $sql = "SELECT product_id, name, main_list_image FROM dtb_products WHERE product_id = ? AND del_flg = 0"; 139 $result = $objQuery->getAll($sql, array($_POST['product_id'])); 140 if ( $result ){ 141 $data = $result[0]; 142 foreach( $data as $key=>$val){ 143 $this->arrItems[$_POST['rank']][$key] = $val; 144 } 145 $this->arrItems[$_POST['rank']]['rank'] = $_POST['rank']; 146 } 147 $this->checkRank = $_POST['rank']; 148 } 149 break; 150 default: 151 break; 152 } 153 154 //各ページ共通 155 $this->cnt_question = 6; 156 $this->arrActive = isset($arrActive) ? $arrActive : "";; 157 $this->arrQuestion = isset($arrQuestion) ? $arrQuestion : ""; 111 $arrItems = $this->getRecommendProducts(); 112 break; 113 } 114 115 $this->category_id = $this->getCategoryId($arrPost['category_id']); 116 $this->arrItems = $arrItems; 158 117 159 118 // カテゴリ取得 … … 171 130 } 172 131 173 //---- 取得文字列の変換 174 function lfConvertParam($array, $arrRegistColumn) { 175 176 // カラム名とコンバート情報 177 foreach ($arrRegistColumn as $data) { 178 $arrConvList[ $data["column"] ] = $data["convert"]; 179 } 180 // 文字変換 181 $new_array = array(); 182 foreach ($arrConvList as $key => $val) { 183 $new_array[$key] = isset($array[$key]) ? $array[$key] : ""; 184 if( strlen($val) > 0) { 185 $new_array[$key] = mb_convert_kana($new_array[$key] ,$val); 186 } 187 } 188 return $new_array; 189 190 } 191 192 /* 入力エラーチェック */ 193 function lfErrorCheck() { 194 $objQuery = new SC_Query; 195 $objErr = new SC_CheckError(); 196 197 $objErr->doFunc(array("コメント", "comment", LTEXT_LEN), array("EXIST_CHECK","MAX_LENGTH_CHECK")); 198 132 /** 133 * パラメータの初期化を行う 134 * @param Object $objFormParam 135 */ 136 function lfInitParam(&$objFormParam){ 137 $objFormParam->addParam("商品ID", "product_id", INT_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 138 $objFormParam->addParam("カテゴリID", "category_id", INT_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 139 $objFormParam->addParam("ランク", "rank", INT_LEN, "n", array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK")); 140 $objFormParam->addParam("コメント", "comment", LTEXT_LEN, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK")); 141 } 142 143 /** 144 * 入力されたパラメータのエラーチェックを行う。 145 * @param Object $objFormParam 146 * @return Array エラー内容 147 */ 148 function lfCheckError(&$objFormParam){ 149 $objErr = new SC_CheckError($objFormParam->getHashArray()); 150 $objErr->arrErr = $objFormParam->checkError(); 199 151 return $objErr->arrErr; 152 } 153 154 /** 155 * 既に登録されている内容を取得する 156 * @return Array $arrReturnProducts データベースに登録されているおすすめ商品の配列 157 */ 158 function getRecommendProducts(){ 159 $objQuery = $objQuery =& SC_Query::getSingletonInstance(); 160 $col = 'dtb_products.name,dtb_products.main_list_image,dtb_best_products.*'; 161 $table = 'dtb_best_products INNER JOIN dtb_products USING (product_id)'; 162 $where = 'dtb_best_products.del_flg = 0'; 163 $order = 'rank'; 164 $objQuery->setOrder($order); 165 $arrProducts = $objQuery->select($col, $table, $where); 166 167 $arrReturnProducts = array(); 168 foreach( $arrProducts as $data ){ 169 $arrReturnProducts[$data['rank']] = $data; 170 } 171 return $arrReturnProducts; 172 } 173 174 /** 175 * おすすめ商品の新規登録を行う。 176 * @param Array $arrPost POSTの値を格納した配列 177 * @param Integer $member_id 登録した管理者を示すID 178 */ 179 function insertRecommendProduct($arrPost,$member_id){ 180 $objQuery = $objQuery =& SC_Query::getSingletonInstance(); 181 // 古いおすすめ商品のデータを削除する。 182 $this->deleteProduct($arrPost); 183 184 $sqlval = array(); 185 $sqlval['product_id'] = $arrPost['product_id']; 186 $sqlval['category_id'] = $arrPost['category_id']; 187 $sqlval['rank'] = $arrPost['rank']; 188 $sqlval['comment'] = $arrPost['comment']; 189 $sqlval['creator_id'] = $member_id; 190 $sqlval['create_date'] = "NOW()"; 191 $sqlval['update_date'] = "NOW()"; 192 $sqlval['best_id'] = $objQuery->nextVal('dtb_best_products_best_id'); 193 $objQuery->insert("dtb_best_products", $sqlval); 194 } 195 196 /** 197 * データを削除する 198 * @param Array $arrPost POSTの値を格納した配列 199 */ 200 function deleteProduct($arrPost){ 201 $objQuery = $objQuery =& SC_Query::getSingletonInstance(); 202 $table = 'dtb_best_products'; 203 $where = 'category_id = ? AND rank = ?'; 204 $arrval = array($arrPost['category_id'],$arrPost['rank']); 205 $objQuery->delete($table, $where, $arrval); 206 } 207 208 /** 209 * 商品情報を取得する 210 * @param Integer $product_id 商品ID 211 * @return Array $arrProduct 商品のデータを格納した配列 212 */ 213 function getProduct($product_id){ 214 $objQuery = $objQuery =& SC_Query::getSingletonInstance(); 215 $col = 'product_id,main_list_image,name'; 216 $table = 'dtb_products'; 217 $where = 'product_id = ? AND del_flg = 0'; 218 $arrval = array($product_id); 219 $arrProduct = $objQuery->select($col, $table, $where, $arrval); 220 return $arrProduct[0]; 221 } 222 223 /** 224 * 商品のデータを表示用に処理する 225 * @param Array $arrPost POSTのデータを格納した配列 226 * @param Array $arrItems フロントに表示される商品の情報を格納した配列 227 */ 228 function setProducts($arrPost,$arrItems){ 229 $arrProduct = $this->getProduct($arrPost['product_id']); 230 if (count($arrProduct) > 0) { 231 $rank = $arrPost['rank']; 232 foreach( $arrProduct as $key => $val){ 233 $arrItems[$rank][$key] = $val; 234 } 235 $arrItems[$rank]['rank'] = $rank; 236 } 237 return $arrItems; 238 } 239 240 /** 241 * カテゴリーIDを取得する。 242 * @param Integer $category_id 243 * @return Integer 244 */ 245 function getCategoryId($category_id){ 246 if ( SC_Utils_Ex::sfIsInt($category_id)){ 247 return $category_id; 248 }else{ 249 return 0; 250 } 200 251 } 201 252 -
branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_RecommendSearch.php
r20116 r20265 66 66 */ 67 67 function action() { 68 $objSess = new SC_Session(); 68 // 認証可否の判定 69 SC_Utils_Ex::sfIsSuccess(new SC_Session()); 69 70 $objDb = new SC_Helper_DB_Ex(); 70 71 // 認証可否の判定 72 SC_Utils_Ex::sfIsSuccess($objSess); 71 $objFormParam = new SC_FormParam(); 72 $this->lfInitParam($objFormParam); 73 $objFormParam->setParam($_POST); 74 $objFormParam->convParam(); 73 75 74 76 switch ($this->getMode()) { 75 77 case 'search': 78 $objQuery = new SC_Query(); 76 79 // POST値の引き継ぎ 77 $this->arrForm = $_POST; 78 // 入力文字の強制変換 79 $this->lfConvertParam(); 80 81 $where = 'del_flg = 0'; 82 83 /* 入力エラーなし */ 84 foreach ($this->arrForm as $key => $val) { 80 $this->arrErr = $this->lfCheckError(&$objFormParam); 81 $arrPost = $objFormParam->getHashArray(); 82 // 入力された値にエラーがない場合、検索処理を行う。 83 // 検索結果の数に応じてページャの処理も入れる。 84 if (SC_Utils_Ex::isBlank($this->arrErr)) { 85 $where = 'del_flg = 0'; 86 $order = "update_date DESC, product_id DESC"; 87 list($where, $arrval) = $this->getSearchParam(&$objDb,$arrPost,$where); 88 $linemax = $this->getLineCount($where, $arrval); 89 $page_max = $this->setPageMax($arrPost['search_page_max']); 90 91 // ページ送りの取得 92 $objNavi = new SC_PageNavi($arrPost['search_pageno'], $linemax, $page_max, "fnNaviSearchOnlyPage", NAVI_PMAX); 93 $this->tpl_linemax = $linemax; // 何件が該当しました。表示用 94 $this->tpl_strnavi = $objNavi->strnavi; // 表示文字列 95 $startno = $objNavi->start_row; 96 97 // 取得範囲の指定(開始行番号、行数のセット) 98 $objQuery->setLimitOffset($page_max, $startno); 99 $objQuery->setOrder($order); 100 $this->arrForm = $arrPost; 101 // 検索結果の取得 102 $this->arrProducts = $this->getProducts($objQuery, $arrval, $where); 103 } 104 break; 105 default: 106 break; 107 } 108 109 // カテゴリ取得 110 $this->arrCatList = $objDb->sfGetCategoryList(); 111 $this->setTemplate('contents/recommend_search.tpl'); 112 } 113 114 /** 115 * デストラクタ. 116 * 117 * @return void 118 */ 119 function destroy() { 120 parent::destroy(); 121 } 122 123 /** 124 * パラメータの初期化を行う 125 * @param Object $objFormParam 126 */ 127 function lfInitParam(&$objFormParam){ 128 $objFormParam->addParam("商品ID", "search_name", LTEXT_LEN, "KVa", array( "MAX_LENGTH_CHECK")); 129 $objFormParam->addParam("商品ID", "search_category_id", INT_LEN, "n", array( "MAX_LENGTH_CHECK","NUM_CHECK")); 130 $objFormParam->addParam("商品コード", "search_product_code", LTEXT_LEN, "KVa", array( "MAX_LENGTH_CHECK")); 131 } 132 133 /** 134 * 入力されたパラメータのエラーチェックを行う。 135 * @param Object $objFormParam 136 * @return Array エラー内容 137 */ 138 function lfCheckError(&$objFormParam){ 139 $objErr = new SC_CheckError($objFormParam->getHashArray()); 140 $objErr->arrErr = $objFormParam->checkError(); 141 return $objErr->arrErr; 142 } 143 144 /** 145 * 検索パラメータを返す。 146 * @param Array $arrPost 147 * @return Array $arrSQL 検索条件とパラメータを配列にして返す。 148 */ 149 function getSearchParam(&$objDb,$arrPost,$where){ 150 $arrval = array(); 151 foreach ($arrPost as $key => $val) { 85 152 if($val == "") { 86 153 continue; 87 154 } 88 89 155 switch ($key) { 90 156 case 'search_name': … … 93 159 break; 94 160 case 'search_category_id': 95 161 list($tmp_where, $tmp_arrval) = $objDb->sfGetCatWhere($val); 96 162 if($tmp_where != "") { 97 163 $where.= " AND product_id IN (SELECT product_id FROM dtb_product_categories WHERE " . $tmp_where . ")"; … … 107 173 } 108 174 } 109 110 $order = "update_date DESC, product_id DESC"; 111 112 $objQuery = new SC_Query(); 113 // 行数の取得 114 if (empty($arrval)) $arrval = array(); 115 $linemax = $objQuery->count("dtb_products", $where, $arrval); 116 $this->tpl_linemax = $linemax; // 何件が該当しました。表示用 117 175 return array($where, $arrval); 176 } 177 178 function getLineCount($where,$arrval){ 179 $objQuery =& SC_Query::getSingletonInstance(); 180 $linemax = $objQuery->count("dtb_products", $where, $arrval); 181 return $linemax; 182 } 183 184 function setPageMax($search_page_max){ 118 185 // ページ送りの処理 119 if(isset($_POST['search_page_max']) 120 && is_numeric($_POST['search_page_max'])) { 121 $page_max = $_POST['search_page_max']; 186 if(isset($search_page_max) && is_numeric($search_page_max)) { 187 $page_max = $search_page_max; 122 188 } else { 123 189 $page_max = SEARCH_PMAX; 124 190 } 125 126 // ページ送りの取得 127 $objNavi = new SC_PageNavi($_POST['search_pageno'], $linemax, $page_max, "fnNaviSearchOnlyPage", NAVI_PMAX); 128 $this->tpl_strnavi = $objNavi->strnavi; // 表示文字列 129 $startno = $objNavi->start_row; 130 131 // 取得範囲の指定(開始行番号、行数のセット) 132 $objQuery->setLimitOffset($page_max, $startno); 133 // 表示順序 134 $objQuery->setOrder($order); 135 136 // FIXME 商品コードの表示 137 // 検索結果の取得 138 $this->arrProducts = $objQuery->select("*", SC_Product::alldtlSQL(), $where, $arrval); 139 break; 140 default: 141 break; 142 } 143 144 // カテゴリ取得 145 $this->arrCatList = $objDb->sfGetCategoryList(); 146 147 $this->setTemplate('contents/recomend_search.tpl'); 148 } 149 150 /** 151 * デストラクタ. 152 * 153 * @return void 154 */ 155 function destroy() { 156 parent::destroy(); 157 } 158 159 /* 取得文字列の変換 */ 160 function lfConvertParam() { 161 /* 162 * 文字列の変換 163 * K : 「半角(ハンカク)片仮名」を「全角片仮名」に変換 164 * C : 「全角ひら仮名」を「全角かた仮名」に変換 165 * V : 濁点付きの文字を一文字に変換。"K","H"と共に使用します 166 * n : 「全角」数字を「半角(ハンカク)」に変換 167 */ 168 $arrConvList['search_name'] = "KVa"; 169 $arrConvList['search_product_code'] = "KVa"; 170 171 // 文字変換 172 foreach ($arrConvList as $key => $val) { 173 // POSTされてきた値のみ変換する。 174 if(isset($this->arrForm[$key])) { 175 $this->arrForm[$key] = mb_convert_kana($this->arrForm[$key] ,$val); 176 } 177 } 178 } 191 return $page_max; 192 } 193 194 function getProducts(&$objQuery,$arrval,$where){ 195 $objQuery =& SC_Query::getSingletonInstance(); 196 return $objQuery->select("*", SC_Product::alldtlSQL(), $where, $arrval); 197 } 198 179 199 } 180 200 ?>
Note: See TracChangeset
for help on using the changeset viewer.