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"]&& 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($sqlarray($_POST["news_id"]));
  116.             foreach($result[0as $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$sqlarray$pre_rank  ) );
  138.  
  139.             $sql "UPDATE dtb_news SET rank = 0, del_flg = 1, update_date = NOW() WHERE news_id = ?";
  140.             $conn->query$sqlarray$_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$sqlarray$rank 1$position ) );
  233.         if$position $rank $conn->query$sqlarray$position$rank ) );
  234.  
  235.         //-- 指定した順位へrankを書き換える。
  236.         $sql  "UPDATE $tableName SET rank = ?, update_date = NOW() WHERE $keyIdColumn = ? AND del_flg = 0 ";
  237.         $conn->query$sqlarray$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->doFuncarray("移動順位""moveposition")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