Changeset 15659
- Timestamp:
- 2007/09/10 13:19:15 (13 years ago)
- Location:
- branches/feature-module-update
- Files:
-
- 4 added
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/feature-module-update/html/admin/contents/index.php
r15532 r15659 5 5 * http://www.lockon.co.jp/ 6 6 */ 7 require_once("../require.php");8 7 9 // ---- 認証可否の判定10 $objSess = new SC_Session();11 sfIsSuccess($objSess);8 // {{{ requires 9 require_once("../../require.php"); 10 require_once(CLASS_PATH . "page_extends/admin/contents/LC_Page_Admin_Contents_Ex.php"); 12 11 13 //---- ページ表示クラス 14 class LC_Page { 15 16 var $arrSession; 17 var $tpl_mainpage; 18 var $sub_navipage; 19 var $regist_data; 20 var $arrYear; 21 var $arrMonth; 22 var $arrDate; 23 var $selected_year; 24 var $selected_month; 25 var $selected_day; 26 var $list_data; 27 var $max_rank; 28 var $edit_mode; 29 var $news_title; 30 var $news_date_unix; 31 var $news_url; 32 var $link_method; 33 34 function LC_Page() { 35 $this->tpl_mainpage = 'contents/index.tpl'; 36 $this->tpl_subnavi = 'contents/subnavi.tpl'; 37 $this->tpl_subno = "index"; 38 $this->tpl_mainno = 'contents'; 39 $this->selected_year = date("Y"); 40 $this->selected_month = date("n"); 41 $this->selected_day = date("j"); 42 $this->tpl_subtitle = '新着情報管理'; 43 } 44 } 12 // }}} 13 // {{{ generate page 45 14 46 47 //---- ページ初期設定 48 $conn = new SC_DbConn(); 49 $objPage = new LC_Page(); 50 $objView = new SC_AdminView(); 51 $objDate = new SC_Date(ADMIN_NEWS_STARTYEAR); 52 53 //---- 日付プルダウン設定 54 $objPage->arrYear = $objDate->getYear(); 55 $objPage->arrMonth = $objDate->getMonth(); 56 $objPage->arrDay = $objDate->getDay(); 57 58 //---- 新規登録/編集登録 59 if ( $_POST['mode'] == 'regist'){ 60 $_POST = lfConvData($_POST); 61 62 if ($objPage->arrErr = lfErrorCheck()) { // 入力エラーのチェック 63 foreach($_POST as $key => $val) { 64 $objPage->$key = $val; 65 } 66 $objPage->selected_year = $_POST["year"]; 67 $objPage->selected_month = $_POST["month"]; 68 $objPage->selected_day = $_POST["day"]; 69 70 } else { 71 72 if (isset($_POST['link_method']) == ""){ 73 $_POST['link_method'] = 1; 74 } 75 76 $registDate = $_POST['year'] ."/". $_POST['month'] ."/". $_POST['day']; 77 78 //-- 編集登録 79 if (strlen($_POST["news_id"]) > 0 && is_numeric($_POST["news_id"])) { 80 81 lfNewsUpdate(); 82 83 //-- 新規登録 84 } else { 85 lfNewsInsert(); 86 } 87 88 $objPage->tpl_onload = "window.alert('編集が完了しました');"; 89 } 90 } 91 92 //---- 編集データ取得 93 if ($_POST["mode"] == "search" && is_numeric($_POST["news_id"])) { 94 $sql = "SELECT *, cast(substring(news_date,1, 10) as date) as cast_news_date FROM dtb_news WHERE news_id = ? "; 95 $result = $conn->getAll($sql, array($_POST["news_id"])); 96 foreach($result[0] as $key => $val ){ 97 $objPage->$key = $val; 98 } 99 $arrData = split("-",$result[0]["cast_news_date"]); 100 101 $objPage->selected_year = $arrData[0]; 102 $objPage->selected_month =$arrData[1]; 103 $objPage->selected_day = $arrData[2]; 104 105 $objPage->edit_mode = "on"; 106 } 107 108 //---- データ削除 109 if ( $_POST['mode'] == 'delete' && is_numeric($_POST["news_id"])) { 110 111 // rankを取得 112 $pre_rank = $conn->getone(" SELECT rank FROM dtb_news WHERE del_flg = 0 AND news_id = ? ", array( $_POST['news_id'] )); 113 114 //-- 削除する新着情報以降のrankを1つ繰り上げておく 115 $conn->query("BEGIN"); 116 $sql = "UPDATE dtb_news SET rank = rank - 1, update_date = NOW() WHERE del_flg = 0 AND rank > ?"; 117 $conn->query( $sql, array( $pre_rank ) ); 118 119 $sql = "UPDATE dtb_news SET rank = 0, del_flg = 1, update_date = NOW() WHERE news_id = ?"; 120 $conn->query( $sql, array( $_POST['news_id'] ) ); 121 $conn->query("COMMIT"); 122 123 sfReload(); //自分にリダイレクト(再読込による誤動作防止) 124 } 125 126 //---- 表示順位移動 127 128 if ( $_POST['mode'] == 'move' && is_numeric($_POST["news_id"]) ) { 129 if ($_POST["term"] == "up") { 130 sfRankUp("dtb_news", "news_id", $_POST["news_id"]); 131 } else if ($_POST["term"] == "down") { 132 sfRankDown("dtb_news", "news_id", $_POST["news_id"]); 133 } 134 //sf_rebuildIndex($conn); 135 sfReload(); 136 } 137 138 //---- 指定表示順位移動 139 if ($_POST['mode'] == 'moveRankSet') { 140 $key = "pos-".$_POST['news_id']; 141 $input_pos = mb_convert_kana($_POST[$key], "n"); 142 if(sfIsInt($input_pos)) { 143 sfMoveRank("dtb_news", "news_id", $_POST['news_id'], $input_pos); 144 sfReload(); 145 } 146 } 147 148 149 //---- 全データ取得 150 $sql = "SELECT *, cast(substring(news_date,1, 10) as date) as cast_news_date FROM dtb_news WHERE del_flg = '0' ORDER BY rank DESC"; 151 $objPage->list_data = $conn->getAll($sql); 152 $objPage->line_max = count($objPage->list_data); 153 $sql = "SELECT MAX(rank) FROM dtb_news WHERE del_flg = '0'"; // rankの最大値を取得 154 $objPage->max_rank = $conn->getOne($sql); 155 156 $objPage->arrForm['news_select'] = 0; 157 158 //---- ページ表示 159 $objView->assignobj($objPage); 160 $objView->display(MAIN_FRAME); 161 162 163 //function --------------------------------------------------------------------------------------------- 164 165 //---- 入力文字列を配列へ 166 function lfConvData( $data ){ 167 168 // 文字列の変換(mb_convert_kanaの変換オプション) 169 $arrFlag = array( 170 "year" => "n" 171 ,"month" => "n" 172 ,"day" => "n" 173 ,"url" => "a" 174 ,"news_title" => "aKV" 175 ,"news_comment" => "aKV" 176 ,"link_method" => "n" 177 ); 178 179 if ( is_array($data) ){ 180 foreach ($arrFlag as $key=>$line) { 181 $data[$key] = mb_convert_kana($data[$key], $line); 182 } 183 } 184 185 return $data; 186 } 187 188 //---- 指定順位へ移動 189 function sf_setRankPosition($conn, $tableName, $keyIdColumn, $keyId, $position) { 190 191 // 自身のランクを取得する 192 $conn->query("BEGIN"); 193 $rank = $conn->getOne("SELECT rank FROM $tableName WHERE $keyIdColumn = ?", array($keyId)); 194 195 if( $position > $rank ) $term = "- 1"; //入れ替え先の順位が入れ換え元の順位より大きい場合 196 if( $position < $rank ) $term = "+ 1"; //入れ替え先の順位が入れ換え元の順位より小さい場合 197 198 //-- 指定した順位の商品から移動させる商品までのrankを1つずらす 199 $sql = "UPDATE $tableName SET rank = rank $term, update_date = NOW() WHERE rank BETWEEN ? AND ? AND del_flg = 0"; 200 if( $position > $rank ) $conn->query( $sql, array( $rank + 1, $position ) ); 201 if( $position < $rank ) $conn->query( $sql, array( $position, $rank - 1 ) ); 202 203 //-- 指定した順位へrankを書き換える。 204 $sql = "UPDATE $tableName SET rank = ?, update_date = NOW() WHERE $keyIdColumn = ? AND del_flg = 0 "; 205 $conn->query( $sql, array( $position, $keyId ) ); 206 $conn->query("COMMIT"); 207 } 208 209 //---- 入力エラーチェック(順位移動用) 210 function sf_errorCheckPosition($conn, $tableName, $position, $keyIdColumn, $keyId) { 211 212 $objErr = new SC_CheckError(); 213 $objErr->doFunc( array("移動順位", "moveposition", 4 ), array( "ZERO_CHECK", "NUM_CHECK", "EXIST_CHECK", "MAX_LENGTH_CHECK" ) ); 214 215 // 自身のランクを取得する。 216 $rank = $conn->getOne("SELECT rank FROM $tableName WHERE $keyIdColumn = ?", array($keyId)); 217 if ($rank == $position ) $objErr->arrErr["moveposition"] .= "※ 指定した移動順位は現在の順位です。"; 218 219 // rankの最大値以上の入力を許容しない 220 if( ! $objErr->arrErr["position"] ) { 221 $sql = "SELECT MAX( rank ) FROM " .$tableName. " WHERE del_flg = 0"; 222 $result = $conn->getOne($sql); 223 if( $position > $result ) $objErr->arrErr["moveposition"] .= "※ 入力された順位は、登録数の最大値を超えています。"; 224 } 225 226 return $objErr->arrErr; 227 } 228 229 //---- 入力エラーチェック 230 function lfErrorCheck(){ 231 232 $objErr = new SC_CheckError(); 233 234 $objErr->doFunc(array("日付(年)", "year"), array("EXIST_CHECK")); 235 $objErr->doFunc(array("日付(月)", "month"), array("EXIST_CHECK")); 236 $objErr->doFunc(array("日付(日)", "day"), array("EXIST_CHECK")); 237 $objErr->doFunc(array("日付", "year", "month", "day"), array("CHECK_DATE")); 238 $objErr->doFunc(array("タイトル", 'news_title', MTEXT_LEN), array("EXIST_CHECK","MAX_LENGTH_CHECK")); 239 $objErr->doFunc(array("本文", 'url', URL_LEN), array("MAX_LENGTH_CHECK")); 240 $objErr->doFunc(array("本文", 'news_comment', LTEXT_LEN), array("MAX_LENGTH_CHECK")); 241 242 return $objErr->arrErr; 243 } 244 245 //INSERT文 246 function lfNewsInsert(){ 247 global $conn; 248 global $registDate; 249 250 if ($_POST["link_method"] == "") { 251 $_POST["link_method"] = 1; 252 } 253 254 //rankの最大+1を取得する 255 $rank_max = $conn->getone("SELECT MAX(rank) + 1 FROM dtb_news WHERE del_flg = '0'"); 256 257 $sql = "INSERT INTO dtb_news (news_date, news_title, creator_id, news_url, link_method, news_comment, rank, create_date, update_date) 258 VALUES ( ?,?,?,?,?,?,?,now(),now())"; 259 $arrRegist = array($registDate, $_POST["news_title"], $_SESSION['member_id'], $_POST["news_url"], $_POST["link_method"], $_POST["news_comment"], $rank_max); 260 261 $conn->query($sql, $arrRegist); 262 263 // 最初の1件目の登録はrankにNULLが入るので対策 264 $sql = "UPDATE dtb_news SET rank = 1 WHERE del_flg = 0 AND rank IS NULL"; 265 $conn->query($sql); 266 } 267 268 function lfNewsUpdate(){ 269 global $conn; 270 global $registDate; 271 272 if ($_POST["link_method"] == "") { 273 $_POST["link_method"] = 1; 274 } 275 276 $sql = "UPDATE dtb_news SET news_date = ?, news_title = ?, creator_id = ?, update_date = NOW(), news_url = ?, link_method = ?, news_comment = ? WHERE news_id = ?"; 277 $arrRegist = array($registDate, $_POST['news_title'], $_SESSION['member_id'], $_POST['news_url'], $_POST["link_method"], $_POST['news_comment'], $_POST['news_id']); 278 279 $conn->query($sql, $arrRegist); 280 } 15 $objPage = new LC_Page_Admin_Contents_Ex(); 16 $objPage->init(); 17 $objPage->process(); 18 register_shutdown_function(array($objPage, "destroy")); 281 19 ?>
Note: See TracChangeset
for help on using the changeset viewer.