Source for file LC_Page_Admin_Contents_CsvSql.php

Documentation is available at LC_Page_Admin_Contents_CsvSql.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.  * CSV 出力項目設定(高度な設定)のページクラス.
  29.  *
  30.  * @package Page
  31.  * @author LOCKON CO.,LTD.
  32.  * @version $Id: LC_Page_Admin_Contents_CsvSql.php 17675 2008-11-01 06:44:55Z Seasoft $
  33.  */
  34.  
  35.     // }}}
  36.     // {{{ functions
  37.  
  38.     /**
  39.      * Page を初期化する.
  40.      *
  41.      * @return void 
  42.      */
  43.     function init({
  44.         parent::init();
  45.         $this->tpl_mainpage = 'contents/csv_sql.tpl';
  46.         $this->tpl_subnavi 'contents/subnavi.tpl';
  47.         $this->tpl_subno 'csv';
  48.         $this->tpl_subno_csv 'csv_sql';
  49.         $this->tpl_mainno = "contents";
  50.         $this->tpl_subtitle 'CSV出力設定';
  51.     }
  52.  
  53.     /**
  54.      * Page のプロセス.
  55.      *
  56.      * @return void 
  57.      */
  58.     function process({
  59.         $objView new SC_AdminView();
  60.         $objDbFactory SC_DB_DBFactory_Ex::getInstance();
  61.  
  62.         // 認証可否の判定
  63.         $objSess new SC_Session();
  64.         SC_Utils_Ex::sfIsSuccess($objSess);
  65.  
  66.         if (!isset($_POST['mode'])) $_POST['mode'"";
  67.         if (!isset($_POST['sql_id'])) $_POST['sql_id'"";
  68.         if (!isset($_GET['sql_id'])) $_GET['sql_id'"";
  69.         if (!isset($_POST['selectTable'])) $_POST['selectTable'"";
  70.  
  71.         // SQL_IDの取得
  72.         if ($_POST['sql_id'!= ""{
  73.             $sql_id $_POST['sql_id'];
  74.         }elseif($_GET['sql_id'!= ""){
  75.             $sql_id $_GET['sql_id'];
  76.         }else{
  77.             $sql_id "";
  78.         }
  79.  
  80.         $mode $_POST['mode'];
  81.  
  82.         switch($_POST['mode']{
  83.             // データの登録
  84.         case "confirm":
  85.             // エラーチェック
  86.             $this->arrErr $this->lfCheckError($_POST);
  87.  
  88.             if (count($this->arrErr<= 0){
  89.                 // データの更新
  90.                 $sql_id $this->lfUpdData($sql_id$_POST);
  91.                 // 完了メッセージ表示
  92.                 $this->tpl_onload = "alert('登録が完了しました。');";
  93.             }
  94.             break;
  95.  
  96.             // 確認画面
  97.         case "preview":
  98.             // SQL文表示
  99.             $sql "SELECT \n" $_POST['csv_sql']// FIXME
  100.             $this->sql $sql;
  101.  
  102.             // エラー表示
  103.             $objErrMsg $this->lfCheckSQL($_POST);
  104.             if ($objErrMsg != ""{
  105.                 $errMsg $objErrMsg->message "\n" $objErrMsg->userinfo;
  106.             }
  107.  
  108.             $this->sqlerr = isset($errMsg$errMsg "" ;
  109.  
  110.             $this->objView $objView;
  111.  
  112.             // 画面の表示
  113.             $objView->assignobj($this);
  114.             $objView->display('contents/csv_sql_view.tpl');
  115.             exit;
  116.             break;
  117.  
  118.             // 新規作成
  119.         case "new_page":
  120.             $this->sendRedirect($this->getLocation("./csv_sql.php"));
  121.             exit;
  122.             break;
  123.  
  124.             // データ削除
  125.         case "delete":
  126.             $this->lfDelData($sql_id);
  127.             $this->sendRedirect($this->getLocation("./csv_sql.php"));
  128.             exit;
  129.             break;
  130.  
  131.         case "csv_output":
  132.             // CSV出力データ取得
  133.             $arrCsvData $this->lfGetSqlList(" WHERE sql_id = ?"array($_POST['csv_output_id']));
  134.  
  135.             $objQuery new SC_Query();
  136.  
  137.             $arrCsvOutputData $objQuery->getall("SELECT " $arrCsvData[0]['csv_sql']);
  138.  
  139.             if (count($arrCsvOutputData0{
  140.  
  141.                 $arrKey array_keys(SC_Utils_Ex::sfSwapArray($arrCsvOutputData));
  142.                 $i 0;
  143.                 $header "";
  144.                 foreach($arrKey as $data{
  145.                     if ($i != 0$header .= ", ";
  146.                     $header .= $data;
  147.                     $i ++;
  148.                 }
  149.                 $header .= "\n";
  150.  
  151.                 $data SC_Utils_Ex::getCSVData($arrCsvOutputData$arrKey);
  152.                 // CSV出力
  153.                 SC_Utils_Ex::sfCSVDownload($header.$data);
  154.                 exit;
  155.                 break;
  156.             }else{
  157.                 $this->tpl_onload = "alert('出力データがありません。');";
  158.                 $sql_id "";
  159.                 $_POST="";
  160.             }
  161.             break;
  162.         }
  163.  
  164.         // mode が confirm 以外のときは完了メッセージは出力しない
  165.         if ($mode != "confirm" and $mode != "csv_output"{
  166.             $this->tpl_onload = "";
  167.         }
  168.  
  169.         // 登録済みSQL一覧取得
  170.         $arrSqlList $this->lfGetSqlList();
  171.  
  172.         // 編集用SQLデータの取得
  173.         if ($sql_id != ""{
  174.             $arrSqlData $this->lfGetSqlList(" WHERE sql_id = ?"array($sql_id));
  175.         }
  176.  
  177.         // テーブル一覧を取得する
  178.         $arrTableList $this->lfGetTableList();
  179.         $arrTableList SC_Utils_Ex::sfSwapArray($arrTableList);
  180.  
  181.         // 現在選択されているテーブルを取得する
  182.         if ($_POST['selectTable'== ""){
  183.             $selectTable $arrTableList['table_name'][0];
  184.         }else{
  185.             $selectTable $_POST['selectTable'];
  186.         }
  187.  
  188.         // カラム一覧を取得する
  189.         $arrColList $this->lfGetColumnList($selectTable);
  190.         $arrColList =  SC_Utils_Ex::sfSwapArray($arrColList);
  191.  
  192.         // 表示させる内容を編集
  193.         foreach ($arrTableList['description'as $key => $val{
  194.             $arrTableList['description'][$key$arrTableList['table_name'][$key":" $arrTableList['description'][$key];
  195.         }
  196.         foreach ($arrColList['description'as $key => $val{
  197.             $arrColList['description'][$key$arrColList['column_name'][$key":" $arrColList['description'][$key];
  198.         }
  199.  
  200.  
  201.         $arrDiff array_diff($objDbFactory->sfGetColumnList($selectTable)$arrColList["column_name"]);
  202.         $arrColList["column_name"array_merge($arrColList["column_name"]$arrDiff);
  203.         $arrColList["description"array_merge($arrColList["description"]$arrDiff);
  204.  
  205.         // テンプレートに出力するデータをセット
  206.         $this->arrSqlList $arrSqlList;    // SQL一覧
  207.         $this->arrTableList SC_Utils_Ex::sfarrCombine($arrTableList['table_name']$arrTableList['description']);    // テーブル一覧
  208.         $this->arrColList SC_Utils_Ex::sfarrCombine($arrColList['column_name'],$arrColList['description']);            // カラム一覧
  209.         $this->selectTable $selectTable;    // 選択されているテーブル
  210.         $this->sql_id $sql_id;            // 選択されているSQL
  211.  
  212.         // POSTされたデータをセットする
  213.         if (count($_POST0{
  214.             $arrSqlData[0]['sql_name'= isset($_POST['sql_name']$_POST['sql_name'"";
  215.             $arrSqlData[0]['csv_sql'= isset($_POST['csv_sql']$_POST['csv_sql'"";
  216.         }
  217.         $this->arrSqlData $arrSqlData[0];    // 選択されているSQLデータ
  218.  
  219.         // 画面の表示
  220.         $objView->assignobj($this);
  221.         $objView->display(MAIN_FRAME);
  222.     }
  223.  
  224.     /**
  225.      * デストラクタ.
  226.      *
  227.      * @return void 
  228.      */
  229.     function destroy({
  230.         parent::destroy();
  231.     }
  232.  
  233.     /**
  234.      * テーブル一覧を取得する.
  235.      *
  236.      * @return void 
  237.      */
  238.     function lfGetTableList(){
  239.         $objQuery new SC_Query();
  240.         $arrRet array();        // 結果取得用
  241.  
  242.         $sql "";
  243.         $sql .= "SELECT table_name, description FROM dtb_table_comment WHERE column_name IS NULL ORDER BY table_name";
  244.         $arrRet $objQuery->getAll($sql);
  245.  
  246.         return $arrRet;
  247.     }
  248.  
  249.     /**
  250.      * テーブルのカラム一覧を取得する.
  251.      *
  252.      * @param string $selectTable テーブル名
  253.      * @return array カラム一覧の配列
  254.      */
  255.     function lfGetColumnList($selectTable){
  256.         $objQuery new SC_Query();
  257.         $arrRet array();        // 結果取得用
  258.         $sql "";
  259.         $sql .= " SELECT column_name, description FROM dtb_table_comment WHERE table_name = ? AND column_name IS NOT NULL";
  260.         $arrRet $objQuery->getAll($sqlarray($selectTable));
  261.  
  262.         return $arrRet;
  263.     }
  264.  
  265.     /**
  266.      * 登録済みSQL一覧を取得する.
  267.      *
  268.      * @param string $where Where句
  269.      * @param array $arrData 絞り込みデータ
  270.      * @return array 取得結果の配列
  271.      */
  272.     function lfGetSqlList($where "" $arrData array()){
  273.         $objQuery new SC_Query();
  274.         $arrRet array();        // 結果取得用
  275.  
  276.         $sql "";
  277.         $sql .= " SELECT";
  278.         $sql .= "     sql_id,";
  279.         $sql .= "     sql_name,";
  280.         $sql .= "     csv_sql,";
  281.         $sql .= "     update_date,";
  282.         $sql .= "     create_date";
  283.         $sql .= " FROM";
  284.         $sql .= "     dtb_csv_sql";
  285.  
  286.         // Where句の指定があれば結合する
  287.         if ($where != ""{
  288.             $sql .= " $where ";
  289.         }else{
  290.             $sql .= " ORDER BY sql_id ";
  291.         }
  292.         $sql .= " ";
  293.  
  294.         // データを引数で渡されている場合にはセットする
  295.         if (count($arrData0{
  296.             $arrRet $objQuery->getall($sql$arrData);
  297.         }else{
  298.             $arrRet $objQuery->getall($sql);
  299.         }
  300.  
  301.         return $arrRet;
  302.     }
  303.  
  304.     /**
  305.      * 入力項目のエラーチェックを行う.
  306.      *
  307.      * @param array POSTデータ
  308.      * @return array エラー内容の配列
  309.      */
  310.     function lfCheckError($data){
  311.         $objErr new SC_CheckError();
  312.         $objErr->doFuncarray("名称""sql_name")array("EXIST_CHECK") );
  313.         $objErr->doFuncarray("SQL文""csv_sql""30000")array("EXIST_CHECK""MAX_LENGTH_CHECK") );
  314.  
  315.         // SQLの妥当性チェック
  316.         if ($objErr->arrErr['csv_sql'== ""{
  317.             $objsqlErr $this->lfCheckSQL($data);
  318.             if ($objsqlErr != ""{
  319.                 $objErr->arrErr["csv_sql""SQL文が不正です。SQL文を見直してください";
  320.             }
  321.         }
  322.  
  323.         return $objErr->arrErr;
  324.     }
  325.  
  326.     /**
  327.      * 入力されたSQL文が正しいかチェックを行う.
  328.      *
  329.      * @param array POSTデータ
  330.      * @return array エラー内容
  331.      */
  332.     function lfCheckSQL($data){
  333.         $err "";
  334.         $objDbConn new SC_DbConn();
  335.         $sql "SELECT " $data['csv_sql'" ";
  336.         $ret $objDbConn->conn->query($sql);
  337.         if ($objDbConn->conn->isError($ret)){
  338.             $err $ret;
  339.         }
  340.  
  341.         return $err;
  342.     }
  343.  
  344.     /**
  345.      * DBにデータを保存する.
  346.      *
  347.      * @param integer $sql_id 更新するデータのSQL_ID
  348.      * @param array $arrData 更新データの配列
  349.      * @return integer $sql_id SQL_IDを返す
  350.      */
  351.     function lfUpdData($sql_id ""$arrData array()){
  352.         $objQuery new SC_Query();        // DB操作オブジェクト
  353.         $sql "";                        // データ取得SQL生成用
  354.         $arrRet array();                // データ取得用(更新判定)
  355.         $arrVal array();                // データ更新
  356.  
  357.         // sql_id が指定されている場合にはUPDATE
  358.         if ($sql_id != ""{
  359.             // 存在チェック
  360.             $arrSqlData $this->lfGetSqlList(" WHERE sql_id = ?"array($sql_id));
  361.             if (count($arrSqlData0{
  362.                 // データ更新
  363.                 $sql "UPDATE dtb_csv_sql SET sql_name = ?, csv_sql = ?, update_date = now() WHERE sql_id = ? ";
  364.                 $arrValarray($arrData['sql_name']$arrData['csv_sql']$sql_id);
  365.             }else{
  366.                 // データの新規作成
  367.                 $sql_id "";
  368.                 $sql "INSERT INTO dtb_csv_sql (sql_name, csv_sql, create_date, update_date) values (?, ?, now(), now()) ";
  369.                 $arrValarray($arrData['sql_name']$arrData['csv_sql']);
  370.  
  371.             }
  372.         }else{
  373.             // データの新規作成
  374.             $sql "INSERT INTO dtb_csv_sql (sql_name, csv_sql, create_date, update_date) values (?, ?, now(), now()) ";
  375.             $arrValarray($arrData['sql_name']$arrData['csv_sql']);
  376.         }
  377.         // SQL実行
  378.         $arrRet $objQuery->query($sql,$arrVal);
  379.  
  380.         // 新規作成時は$sql_idを取得
  381.         if ($sql_id == ""{
  382.             $arrNewData $this->lfGetSqlList(" ORDER BY create_date DESC");
  383.             $sql_id $arrNewData[0]['sql_id'];
  384.         }
  385.  
  386.         return $sql_id;
  387.     }
  388.  
  389.  
  390.     /**
  391.      * 登録済みデータを削除する.
  392.      *
  393.      * @param integer $sql_id 削除するデータのSQL_ID
  394.      * @return bool 実行結果 TRUE:成功 FALSE:失敗
  395.      */
  396.     function lfDelData($sql_id ""){
  397.         $objQuery new SC_Query();        // DB操作オブジェクト
  398.         $sql "";                        // データ取得SQL生成用
  399.         $Ret false;                    // 実行結果
  400.  
  401.         // sql_id が指定されている場合のみ実行
  402.         if ($sql_id != ""{
  403.             // データの削除
  404.             $sql "DELETE FROM dtb_csv_sql WHERE sql_id = ? ";
  405.             // SQL実行
  406.             $ret $objQuery->query($sql,array($sql_id));
  407.         }else{
  408.             $ret false;
  409.         }
  410.  
  411.         // 結果を返す
  412.         return $ret;
  413.     }
  414. }
  415. ?>

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