source: branches/feature-module-update/html/admin/contents/index.php @ 15079

Revision 15079, 8.9 KB checked in by nanasess, 17 years ago (diff)

svn:mime-type application/x-httpd-php; charset=UTF-8 設定

  • Property svn:mime-type set to application/x-httpd-php; charset=UTF-8
Line 
1<?php
2/*
3 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
4 *
5 * http://www.lockon.co.jp/
6 */
7require_once("../require.php");
8
9//---- 認証可否の判定
10$objSess = new SC_Session();
11sfIsSuccess($objSess);
12
13//---- ページ表示クラス
14class 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}
45
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//---- 新規登録/編集登録
59if ( $_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//---- 編集データ取得
93if ($_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//---- データ削除
109if ( $_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
128if ( $_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//---- 指定表示順位移動
139if ($_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//---- 入力文字列を配列へ
166function 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//---- 指定順位へ移動
189function 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//---- 入力エラーチェック(順位移動用)
210function 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//---- 入力エラーチェック
230function 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文
246function 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
268function 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}
281?>
Note: See TracBrowser for help on using the repository browser.