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

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

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