Changeset 20265


Ignore:
Timestamp:
2011/02/20 20:25:16 (12 years ago)
Author:
nakanishi
Message:

fixes #1015 [管理画面]コンテンツ管理(CSV出力項目設定以外)

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  
    119119      <td> 
    120120        <!--{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}-->> 
    122122          <option value="" selected>----</option> 
    123123          <!--{html_options options=$arrYear selected=$arrForm.year}--> 
    124124        </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}-->> 
    126126          <option value="" selected>--</option> 
    127127          <!--{html_options options=$arrMonth selected=$arrForm.month}--> 
    128128        </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}-->> 
    130130          <option value="" selected>--</option> 
    131131          <!--{html_options options=$arrDay selected=$arrForm.day}--> 
  • branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents.php

    r20116 r20265  
    5454        ); 
    5555        $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(); 
    5661    } 
    5762 
     
    7277     */ 
    7378    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        // アクセス権があるかを判定し、ない場合はエラー画面を表示する。 
    8080        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'); 
    8688 
    8789        //---- 新規登録/編集登録 
    8890        switch ($this->getMode()) { 
    8991        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('編集が完了しました');"; 
    94107            } 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; 
    113109            } 
    114110            break; 
    115111        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']); 
    127115                $this->edit_mode = "on"; 
    128116            } 
     
    130118        case 'delete': 
    131119        //---- データ削除 
    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); 
    145124                $this->objDisplay->reload();             //自分にリダイレクト(再読込による誤動作防止) 
    146125            } 
     
    148127        case 'move': 
    149128        //---- 表示順位移動 
    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); 
    155135                } 
    156                 //sf_rebuildIndex($conn); 
    157136                $this->objDisplay->reload(); 
    158137            } 
     
    160139        case 'moveRankSet': 
    161140        //---- 指定表示順位移動 
    162             $key = "pos-".$_POST['news_id']; 
    163             $input_pos = mb_convert_kana($_POST[$key], "n"); 
     141            $input_pos = $this->getPostRank($objFormParam,$news_id); 
    164142            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); 
    166144                $this->objDisplay->reload(); 
    167145            } 
     
    171149        } 
    172150 
    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(); 
    176152        $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(); 
    179154    } 
    180155 
     
    189164    } 
    190165 
    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; 
    212266        } 
    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); 
    238285        } 
    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; 
    258362        } 
    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 
    265365} 
    266366?> 
  • branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_Recommend.php

    r20203 r20265  
    4444    function init() { 
    4545        parent::init(); 
    46         $this->tpl_mainpage = 'contents/recomend.tpl'; 
     46        $this->tpl_mainpage = 'contents/recommend.tpl'; 
    4747        $this->tpl_mainno = 'contents'; 
    4848        $this->tpl_subnavi = 'contents/subnavi.tpl'; 
    4949        $this->tpl_subno = "recommend"; 
    5050        $this->tpl_subtitle = 'おすすめ商品管理'; 
     51        //最大登録数の表示 
     52        $this->tpl_disp_max = RECOMMEND_NUM; 
    5153    } 
    5254 
     
    6769     */ 
    6870    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  
    7971        // 認証可否の判定 
    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         
    8778        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            } 
    112109            break; 
    113110        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; 
    158117 
    159118        // カテゴリ取得 
     
    171130    } 
    172131 
    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(); 
    199151        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        } 
    200251    } 
    201252 
  • branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_RecommendSearch.php

    r20116 r20265  
    6666     */ 
    6767    function action() { 
    68         $objSess = new SC_Session(); 
     68        // 認証可否の判定 
     69        SC_Utils_Ex::sfIsSuccess(new SC_Session()); 
    6970        $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(); 
    7375 
    7476        switch ($this->getMode()) { 
    7577        case 'search': 
     78            $objQuery = new SC_Query(); 
    7679            // 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) { 
    85152                if($val == "") { 
    86153                    continue; 
    87154                } 
    88  
    89155                switch ($key) { 
    90156                case 'search_name': 
     
    93159                    break; 
    94160                case 'search_category_id': 
    95                      list($tmp_where, $tmp_arrval) = $objDb->sfGetCatWhere($val); 
     161                    list($tmp_where, $tmp_arrval) = $objDb->sfGetCatWhere($val); 
    96162                    if($tmp_where != "") { 
    97163                        $where.= " AND product_id IN (SELECT product_id FROM dtb_product_categories WHERE " . $tmp_where . ")"; 
     
    107173                } 
    108174            } 
    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){ 
    118185            // ページ送りの処理 
    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; 
    122188            } else { 
    123189                $page_max = SEARCH_PMAX; 
    124190            } 
    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 
    179199} 
    180200?> 
Note: See TracChangeset for help on using the changeset viewer.