Page
[ class tree: Page ] [ index: Page ] [ all elements ]

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-2010 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.                 $arrParams array("news_url""news_title""news_comment""link_method");
  84.  
  85.                 foreach($arrParams as $key{
  86.                     $this->$key $_POST[$key];
  87.                 }
  88.                 $this->selected_year $_POST["year"];
  89.                 $this->selected_month $_POST["month"];
  90.                 $this->selected_day $_POST["day"];
  91.  
  92.             else {
  93.  
  94.                 if (isset($_POST['link_method']== ""){
  95.                     $_POST['link_method'1;
  96.                 }
  97.  
  98.                 $this->registDate $_POST['year'."/"$_POST['month'."/"$_POST['day'];
  99.  
  100.                 //-- 編集登録
  101.                 if (strlen($_POST["news_id"]&& is_numeric($_POST["news_id"])) {
  102.  
  103.                     $this->lfNewsUpdate($conn);
  104.  
  105.                     //-- 新規登録
  106.                 else {
  107.                     $this->lfNewsInsert($conn);
  108.                 }
  109.  
  110.                 $this->tpl_onload = "window.alert('編集が完了しました');";
  111.             }
  112.         }
  113.  
  114.         //---- 編集データ取得
  115.         if ($_POST["mode"== "search" && is_numeric($_POST["news_id"])) {
  116.             $sql "SELECT *, cast(news_date as date) as cast_news_date FROM dtb_news WHERE news_id = ? ";
  117.             $result $conn->getAll($sqlarray($_POST["news_id"]));
  118.             foreach($result[0as $key => $val ){
  119.                 $this->$key $val;
  120.             }
  121.             $arrData split("-",$result[0]["cast_news_date"]);
  122.  
  123.             $this->selected_year $arrData[0];
  124.             $this->selected_month =$arrData[1];
  125.             $this->selected_day =  $arrData[2];
  126.  
  127.             $this->edit_mode "on";
  128.         }
  129.  
  130.         //---- データ削除
  131.         if $_POST['mode'== 'delete' && is_numeric($_POST["news_id"])) {
  132.  
  133.             // rankを取得
  134.             $pre_rank $conn->getOne(" SELECT rank FROM dtb_news WHERE del_flg = 0 AND news_id = ? "array$_POST['news_id']  ));
  135.  
  136.             //-- 削除する新着情報以降のrankを1つ繰り上げておく
  137.             $conn->query("BEGIN");
  138.             $sql "UPDATE dtb_news SET rank = rank - 1, update_date = NOW() WHERE del_flg = 0 AND rank > ?";
  139.             $conn->query$sqlarray$pre_rank  ) );
  140.  
  141.             $sql "UPDATE dtb_news SET rank = 0, del_flg = 1, update_date = NOW() WHERE news_id = ?";
  142.             $conn->query$sqlarray$_POST['news_id') );
  143.             $conn->query("COMMIT");
  144.  
  145.             $this->reload();             //自分にリダイレクト(再読込による誤動作防止)
  146.         }
  147.  
  148.         //---- 表示順位移動
  149.  
  150.         if $_POST['mode'== 'move' && 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"]);
  155.             }
  156.             //sf_rebuildIndex($conn);
  157.             $this->reload();
  158.         }
  159.  
  160.         //---- 指定表示順位移動
  161.         if ($_POST['mode'== 'moveRankSet'{
  162.             $key "pos-".$_POST['news_id'];
  163.             $input_pos mb_convert_kana($_POST[$key]"n");
  164.             if(SC_Utils_Ex::sfIsInt($input_pos)) {
  165.                 $objDb->sfMoveRank("dtb_news""news_id"$_POST['news_id']$input_pos);
  166.                 $this->reload();
  167.             }
  168.         }
  169.  
  170.  
  171.         //---- 全データ取得
  172.         $sql "SELECT *, cast(news_date as date) as cast_news_date FROM dtb_news WHERE del_flg = '0' ORDER BY rank DESC";
  173.         $this->list_data $conn->getAll($sql);
  174.         $this->line_max count($this->list_data);
  175.         $sql "SELECT MAX(rank) FROM dtb_news WHERE del_flg = '0'";        // rankの最大値を取得
  176.         $this->max_rank $conn->getOne($sql);
  177.  
  178.         $this->arrForm['news_select'0;
  179.  
  180.         //---- ページ表示
  181.         $objView->assignobj($this);
  182.         $objView->display(MAIN_FRAME);
  183.  
  184.     }
  185.  
  186.  
  187.     /**
  188.      * デストラクタ.
  189.      *
  190.      * @return void 
  191.      */
  192.     function destroy({
  193.         parent::destroy();
  194.     }
  195.  
  196.  
  197.     //---- 入力文字列を配列へ
  198.     function lfConvData$data ){
  199.  
  200.         // 文字列の変換(mb_convert_kanaの変換オプション)
  201.         $arrFlag array(
  202.                          "year" => "n"
  203.                          ,"month" => "n"
  204.                          ,"day" => "n"
  205.                          ,"url" => "a"
  206.                          ,"news_title" => "aKV"
  207.                          ,"news_comment" => "aKV"
  208.                          ,"link_method" => "n"
  209.                          );
  210.  
  211.         if is_array($data) ){
  212.             foreach ($arrFlag as $key=>$line{
  213.                 $data[$key= isset($data[$key])
  214.                                       ? mb_convert_kana($data[$key]$line)
  215.                                       : "";
  216.             }
  217.         }
  218.  
  219.         return $data;
  220.     }
  221.  
  222.     //---- 指定順位へ移動
  223.     function sf_setRankPosition(&$conn$tableName$keyIdColumn$keyId$position{
  224.  
  225.         // 自身のランクを取得する
  226.         $conn->query("BEGIN");
  227.         $rank $conn->getOne("SELECT rank FROM $tableName WHERE $keyIdColumn = ?"array($keyId));
  228.  
  229.         if$position $rank $term "- 1";  //入れ替え先の順位が入れ換え元の順位より大きい場合
  230.         if$position $rank $term "+ 1";  //入れ替え先の順位が入れ換え元の順位より小さい場合
  231.  
  232.         //-- 指定した順位の商品から移動させる商品までのrankを1つずらす
  233.         $sql "UPDATE $tableName SET rank = rank $term, update_date = NOW() WHERE rank BETWEEN ? AND ? AND del_flg = 0";
  234.         if$position $rank $conn->query$sqlarray$rank 1$position ) );
  235.         if$position $rank $conn->query$sqlarray$position$rank ) );
  236.  
  237.         //-- 指定した順位へrankを書き換える。
  238.         $sql  "UPDATE $tableName SET rank = ?, update_date = NOW() WHERE $keyIdColumn = ? AND del_flg = 0 ";
  239.         $conn->query$sqlarray$position$keyId ) );
  240.         $conn->query("COMMIT");
  241.     }
  242.  
  243.     //---- 入力エラーチェック(順位移動用)
  244.     function sf_errorCheckPosition(&$conn$tableName$position$keyIdColumn$keyId{
  245.  
  246.         $objErr new SC_CheckError();
  247.         $objErr->doFuncarray("移動順位""moveposition")array"ZERO_CHECK""NUM_CHECK""EXIST_CHECK""MAX_LENGTH_CHECK" ) );
  248.  
  249.         // 自身のランクを取得する。
  250.         $rank $conn->getOne("SELECT rank FROM $tableName WHERE $keyIdColumn = ?"array($keyId));
  251.         if ($rank == $position $objErr->arrErr["moveposition".= "※ 指定した移動順位は現在の順位です。";
  252.  
  253.         // rankの最大値以上の入力を許容しない
  254.         if$objErr->arrErr["position"{
  255.             $sql "SELECT MAX( rank ) FROM " .$tableName" WHERE del_flg = 0";
  256.             $result $conn->getOne($sql);
  257.             if$position $result $objErr->arrErr["moveposition".= "※ 入力された順位は、登録数の最大値を超えています。";
  258.         }
  259.  
  260.         return $objErr->arrErr;
  261.     }
  262.  
  263.     //---- 入力エラーチェック
  264.     function lfErrorCheck(){
  265.  
  266.         $objErr new SC_CheckError();
  267.  
  268.         $objErr->doFunc(array("日付(年)""year")array("EXIST_CHECK"));
  269.         $objErr->doFunc(array("日付(月)""month")array("EXIST_CHECK"));
  270.         $objErr->doFunc(array("日付(日)""day")array("EXIST_CHECK"));
  271.         $objErr->doFunc(array("日付""year""month""day")array("CHECK_DATE"));
  272.         $objErr->doFunc(array("タイトル"'news_title'MTEXT_LEN)array("EXIST_CHECK","MAX_LENGTH_CHECK"));
  273.         $objErr->doFunc(array("本文"'url'URL_LEN)array("MAX_LENGTH_CHECK"));
  274.         $objErr->doFunc(array("本文"'news_comment'LTEXT_LEN)array("MAX_LENGTH_CHECK"));
  275.  
  276.         return $objErr->arrErr;
  277.     }
  278.  
  279.     //INSERT文
  280.     function lfNewsInsert(&$conn){
  281.  
  282.         if ($_POST["link_method"== ""{
  283.             $_POST["link_method"1;
  284.         }
  285.  
  286.         //rankの最大+1を取得する
  287.         $rank_max $conn->getOne("SELECT MAX(rank) + 1 FROM dtb_news WHERE del_flg = '0'");
  288.  
  289.         $sql "INSERT INTO dtb_news (news_date, news_title, creator_id, news_url, link_method, news_comment, rank, create_date, update_date)
  290.             VALUES ( ?,?,?,?,?,?,?,now(),now())";
  291.         $arrRegist array($this->registDate$_POST["news_title"]$_SESSION['member_id'],  $_POST["news_url"]$_POST["link_method"]$_POST["news_comment"]$rank_max);
  292.  
  293.         $conn->query($sql$arrRegist);
  294.  
  295.         // 最初の1件目の登録はrankにNULLが入るので対策
  296.         $sql "UPDATE dtb_news SET rank = 1 WHERE del_flg = 0 AND rank IS NULL";
  297.         $conn->query($sql);
  298.     }
  299.  
  300.     function lfNewsUpdate(&$conn){
  301.  
  302.         if ($_POST["link_method"== ""{
  303.             $_POST["link_method"1;
  304.         }
  305.  
  306.         $sql "UPDATE dtb_news SET news_date = ?, news_title = ?, creator_id = ?, update_date = NOW(),  news_url = ?, link_method = ?, news_comment = ? WHERE news_id = ?";
  307.         $arrRegist array($this->registDate$_POST['news_title']$_SESSION['member_id']$_POST['news_url']$_POST["link_method"]$_POST['news_comment']$_POST['news_id']);
  308.  
  309.         $conn->query($sql$arrRegist);
  310.     }
  311. }
  312. ?>

Documentation generated on Fri, 24 Feb 2012 13:58:31 +0900 by Seasoft