Source for file LC_Page_Admin_Contents.php

Documentation is available at LC_Page_Admin_Contents.php

  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.lockon.co.jp/
  8.  *
  9.  * This program is free software; you can redistribute it and/or
  10.  * modify it under the terms of the GNU General Public License
  11.  * as published by the Free Software Foundation; either version 2
  12.  * of the License, or (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  22.  */
  23.  
  24. // {{{ requires
  25. require_once(CLASS_PATH . "pages/LC_Page.php");
  26.  
  27. /**
  28.  * コンテンツ管理 のページクラス.
  29.  *
  30.  * @package Page
  31.  * @author LOCKON CO.,LTD.
  32.  * @version $Id$
  33.  */
  34. class LC_Page_Admin_Contents extends LC_Page {
  35.  
  36.     // }}}
  37.     // {{{ functions
  38.  
  39.     /**
  40.      * Page を初期化する.
  41.      *
  42.      * @return void 
  43.      */
  44.     function init() {
  45.         parent::init();
  46.         $this->tpl_mainpage = 'contents/index.tpl';
  47.         $this->tpl_subnavi = 'contents/subnavi.tpl';
  48.         $this->tpl_subno = "index";
  49.         $this->tpl_mainno = 'contents';
  50.         $this->selected_year = date("Y");
  51.         $this->selected_month = date("n");
  52.         $this->selected_day = date("j");
  53.         $this->tpl_subtitle = '新着情報管理';
  54.     }
  55.  
  56.     /**
  57.      * Page のプロセス.
  58.      *
  59.      * @return void 
  60.      */
  61.     function process() {
  62.  
  63.         //---- ページ初期設定
  64.         $conn = new SC_DbConn();
  65.         $objView = new SC_AdminView();
  66.         $objDate = new SC_Date(ADMIN_NEWS_STARTYEAR);
  67.         $objDb = new SC_Helper_DB_Ex();
  68.  
  69.         SC_Utils_Ex::sfIsSuccess(new SC_Session());
  70.  
  71.         //---- 日付プルダウン設定
  72.         $this->arrYear = $objDate->getYear();
  73.         $this->arrMonth = $objDate->getMonth();
  74.         $this->arrDay = $objDate->getDay();
  75.  
  76.         if (!isset($_POST['mode'])) $_POST['mode'] = "";
  77.  
  78.         //---- 新規登録/編集登録
  79.         if ( $_POST['mode'] == 'regist'){
  80.             $_POST = $this->lfConvData($_POST);
  81.  
  82.             if ($this->arrErr = $this->lfErrorCheck()) {       // 入力エラーのチェック
  83.                 foreach($_POST as $key => $val) {
  84.                     $this->$key = $val;
  85.                 }
  86.                 $this->selected_year = $_POST["year"];
  87.                 $this->selected_month = $_POST["month"];
  88.                 $this->selected_day = $_POST["day"];
  89.  
  90.             } else {
  91.  
  92.                 if (isset($_POST['link_method']) == ""){
  93.                     $_POST['link_method'] = 1;
  94.                 }
  95.  
  96.                 $this->registDate = $_POST['year'] ."/". $_POST['month'] ."/". $_POST['day'];
  97.  
  98.                 //-- 編集登録
  99.                 if (strlen($_POST["news_id"]) > 0 && is_numeric($_POST["news_id"])) {
  100.  
  101.                     $this->lfNewsUpdate($conn);
  102.  
  103.                     //-- 新規登録
  104.                 } else {
  105.                     $this->lfNewsInsert($conn);
  106.                 }
  107.  
  108.                 $this->tpl_onload = "window.alert('編集が完了しました');";
  109.             }
  110.         }
  111.  
  112.         //---- 編集データ取得
  113.         if ($_POST["mode"] == "search" && is_numeric($_POST["news_id"])) {
  114.             $sql = "SELECT *, cast(news_date as date) as cast_news_date FROM dtb_news WHERE news_id = ? ";
  115.             $result = $conn->getAll($sql, array($_POST["news_id"]));
  116.             foreach($result[0] as $key => $val ){
  117.                 $this->$key = $val;
  118.             }
  119.             $arrData = split("-",$result[0]["cast_news_date"]);
  120.  
  121.             $this->selected_year = $arrData[0];
  122.             $this->selected_month =$arrData[1];
  123.             $this->selected_day =  $arrData[2];
  124.  
  125.             $this->edit_mode = "on";
  126.         }
  127.  
  128.         //---- データ削除
  129.         if ( $_POST['mode'] == 'delete' && is_numeric($_POST["news_id"])) {
  130.  
  131.             // rankを取得
  132.             $pre_rank = $conn->getone(" SELECT rank FROM dtb_news WHERE del_flg = 0 AND news_id = ? ", array( $_POST['news_id']  ));
  133.  
  134.             //-- 削除する新着情報以降のrankを1つ繰り上げておく
  135.             $conn->query("BEGIN");
  136.             $sql = "UPDATE dtb_news SET rank = rank - 1, update_date = NOW() WHERE del_flg = 0 AND rank > ?";
  137.             $conn->query( $sql, array( $pre_rank  ) );
  138.  
  139.             $sql = "UPDATE dtb_news SET rank = 0, del_flg = 1, update_date = NOW() WHERE news_id = ?";
  140.             $conn->query( $sql, array( $_POST['news_id'] ) );
  141.             $conn->query("COMMIT");
  142.  
  143.             $this->reload();             //自分にリダイレクト(再読込による誤動作防止)
  144.         }
  145.  
  146.         //---- 表示順位移動
  147.  
  148.         if ( $_POST['mode'] == 'move' && is_numeric($_POST["news_id"]) ) {
  149.             if ($_POST["term"] == "up") {
  150.                 $objDb->sfRankUp("dtb_news", "news_id", $_POST["news_id"]);
  151.             } else if ($_POST["term"] == "down") {
  152.                 $objDb->sfRankDown("dtb_news", "news_id", $_POST["news_id"]);
  153.             }
  154.             //sf_rebuildIndex($conn);
  155.             $this->reload();
  156.         }
  157.  
  158.         //---- 指定表示順位移動
  159.         if ($_POST['mode'] == 'moveRankSet') {
  160.             $key = "pos-".$_POST['news_id'];
  161.             $input_pos = mb_convert_kana($_POST[$key], "n");
  162.             if(SC_Utils_Ex::sfIsInt($input_pos)) {
  163.                 $objDb->sfMoveRank("dtb_news", "news_id", $_POST['news_id'], $input_pos);
  164.                 $this->reload();
  165.             }
  166.         }
  167.  
  168.  
  169.         //---- 全データ取得
  170.         $sql = "SELECT *, cast(news_date as date) as cast_news_date FROM dtb_news WHERE del_flg = '0' ORDER BY rank DESC";
  171.         $this->list_data = $conn->getAll($sql);
  172.         $this->line_max = count($this->list_data);
  173.         $sql = "SELECT MAX(rank) FROM dtb_news WHERE del_flg = '0'";        // rankの最大値を取得
  174.         $this->max_rank = $conn->getOne($sql);
  175.  
  176.         $this->arrForm['news_select'] = 0;
  177.  
  178.         //---- ページ表示
  179.         $objView->assignobj($this);
  180.         $objView->display(MAIN_FRAME);
  181.  
  182.     }
  183.  
  184.  
  185.     /**
  186.      * デストラクタ.
  187.      *
  188.      * @return void 
  189.      */
  190.     function destroy() {
  191.         parent::destroy();
  192.     }
  193.  
  194.  
  195.     //---- 入力文字列を配列へ
  196.     function lfConvData( $data ){
  197.  
  198.         // 文字列の変換(mb_convert_kanaの変換オプション)
  199.         $arrFlag = array(
  200.                          "year" => "n"
  201.                          ,"month" => "n"
  202.                          ,"day" => "n"
  203.                          ,"url" => "a"
  204.                          ,"news_title" => "aKV"
  205.                          ,"news_comment" => "aKV"
  206.                          ,"link_method" => "n"
  207.                          );
  208.  
  209.         if ( is_array($data) ){
  210.             foreach ($arrFlag as $key=>$line) {
  211.                 $data[$key] = isset($data[$key])
  212.                                       ? mb_convert_kana($data[$key], $line)
  213.                                       : "";
  214.             }
  215.         }
  216.  
  217.         return $data;
  218.     }
  219.  
  220.     //---- 指定順位へ移動
  221.     function sf_setRankPosition(&$conn, $tableName, $keyIdColumn, $keyId, $position) {
  222.  
  223.         // 自身のランクを取得する
  224.         $conn->query("BEGIN");
  225.         $rank = $conn->getOne("SELECT rank FROM $tableName WHERE $keyIdColumn = ?", array($keyId));
  226.  
  227.         if( $position > $rank ) $term = "- 1";  //入れ替え先の順位が入れ換え元の順位より大きい場合
  228.         if( $position < $rank ) $term = "+ 1";  //入れ替え先の順位が入れ換え元の順位より小さい場合
  229.  
  230.         //-- 指定した順位の商品から移動させる商品までのrankを1つずらす
  231.         $sql = "UPDATE $tableName SET rank = rank $term, update_date = NOW() WHERE rank BETWEEN ? AND ? AND del_flg = 0";
  232.         if( $position > $rank ) $conn->query( $sql, array( $rank + 1, $position ) );
  233.         if( $position < $rank ) $conn->query( $sql, array( $position, $rank - 1 ) );
  234.  
  235.         //-- 指定した順位へrankを書き換える。
  236.         $sql  = "UPDATE $tableName SET rank = ?, update_date = NOW() WHERE $keyIdColumn = ? AND del_flg = 0 ";
  237.         $conn->query( $sql, array( $position, $keyId ) );
  238.         $conn->query("COMMIT");
  239.     }
  240.  
  241.     //---- 入力エラーチェック(順位移動用)
  242.     function sf_errorCheckPosition(&$conn, $tableName, $position, $keyIdColumn, $keyId) {
  243.  
  244.         $objErr = new SC_CheckError();
  245.         $objErr->doFunc( array("移動順位", "moveposition", 4 ), array( "ZERO_CHECK", "NUM_CHECK", "EXIST_CHECK", "MAX_LENGTH_CHECK" ) );
  246.  
  247.         // 自身のランクを取得する。
  248.         $rank = $conn->getOne("SELECT rank FROM $tableName WHERE $keyIdColumn = ?", array($keyId));
  249.         if ($rank == $position ) $objErr->arrErr["moveposition"] .= "※ 指定した移動順位は現在の順位です。";
  250.  
  251.         // rankの最大値以上の入力を許容しない
  252.         if( ! $objErr->arrErr["position"] ) {
  253.             $sql = "SELECT MAX( rank ) FROM " .$tableName. " WHERE del_flg = 0";
  254.             $result = $conn->getOne($sql);
  255.             if( $position > $result ) $objErr->arrErr["moveposition"] .= "※ 入力された順位は、登録数の最大値を超えています。";
  256.         }
  257.  
  258.         return $objErr->arrErr;
  259.     }
  260.  
  261.     //---- 入力エラーチェック
  262.     function lfErrorCheck(){
  263.  
  264.         $objErr = new SC_CheckError();
  265.  
  266.         $objErr->doFunc(array("日付(年)", "year"), array("EXIST_CHECK"));
  267.         $objErr->doFunc(array("日付(月)", "month"), array("EXIST_CHECK"));
  268.         $objErr->doFunc(array("日付(日)", "day"), array("EXIST_CHECK"));
  269.         $objErr->doFunc(array("日付", "year", "month", "day"), array("CHECK_DATE"));
  270.         $objErr->doFunc(array("タイトル", 'news_title', MTEXT_LEN), array("EXIST_CHECK","MAX_LENGTH_CHECK"));
  271.         $objErr->doFunc(array("本文", 'url', URL_LEN), array("MAX_LENGTH_CHECK"));
  272.         $objErr->doFunc(array("本文", 'news_comment', LTEXT_LEN), array("MAX_LENGTH_CHECK"));
  273.  
  274.         return $objErr->arrErr;
  275.     }
  276.  
  277.     //INSERT文
  278.     function lfNewsInsert(&$conn){
  279.  
  280.         if ($_POST["link_method"] == "") {
  281.             $_POST["link_method"] = 1;
  282.         }
  283.  
  284.         //rankの最大+1を取得する
  285.         $rank_max = $conn->getone("SELECT MAX(rank) + 1 FROM dtb_news WHERE del_flg = '0'");
  286.  
  287.         $sql = "INSERT INTO dtb_news (news_date, news_title, creator_id, news_url, link_method, news_comment, rank, create_date, update_date)
  288.             VALUES ( ?,?,?,?,?,?,?,now(),now())";
  289.         $arrRegist = array($this->registDate, $_POST["news_title"], $_SESSION['member_id'],  $_POST["news_url"], $_POST["link_method"], $_POST["news_comment"], $rank_max);
  290.  
  291.         $conn->query($sql, $arrRegist);
  292.  
  293.         // 最初の1件目の登録はrankにNULLが入るので対策
  294.         $sql = "UPDATE dtb_news SET rank = 1 WHERE del_flg = 0 AND rank IS NULL";
  295.         $conn->query($sql);
  296.     }
  297.  
  298.     function lfNewsUpdate(&$conn){
  299.  
  300.         if ($_POST["link_method"] == "") {
  301.             $_POST["link_method"] = 1;
  302.         }
  303.  
  304.         $sql = "UPDATE dtb_news SET news_date = ?, news_title = ?, creator_id = ?, update_date = NOW(),  news_url = ?, link_method = ?, news_comment = ? WHERE news_id = ?";
  305.         $arrRegist = array($this->registDate, $_POST['news_title'], $_SESSION['member_id'], $_POST['news_url'], $_POST["link_method"], $_POST['news_comment'], $_POST['news_id']);
  306.  
  307.         $conn->query($sql, $arrRegist);
  308.     }
  309. }
  310. ?>

Documentation generated on Tue, 28 Apr 2009 18:10:50 +0900 by phpDocumentor 1.4.2