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

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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?> 
Note: See TracChangeset for help on using the changeset viewer.