Source for file LC_Page_Admin_Contents_CsvSql.php
Documentation is available at LC_Page_Admin_Contents_CsvSql.php
* This file is part of EC-CUBE
* Copyright(c) 2000-2011 LOCKON CO.,LTD. All Rights Reserved.
* http://www.lockon.co.jp/
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
require_once CLASS_EX_REALDIR . 'page_extends/admin/LC_Page_Admin_Ex.php';
* CSV 出力項目設定(高度な設定)のページクラス.
* @author LOCKON CO.,LTD.
* @version $Id: LC_Page_Admin_Contents_CsvSql.php 21185 2011-08-11 10:37:10Z shutta $
$this->tpl_mainpage = 'contents/csv_sql.tpl';
$this->tpl_subno = 'csv';
$this->tpl_subno_csv = 'csv_sql';
$this->tpl_mainno = 'contents';
$this->tpl_maintitle = 'コンテンツ管理';
$this->tpl_subtitle = 'CSV出力設定';
$objFormParam = new SC_FormParam_Ex();
$objFormParam->setParam($_POST);
$objFormParam->setParam($_GET);
$objFormParam->convParam();
$this->arrForm = $objFormParam->getHashArray();
switch($this->getMode()) {
if(SC_Utils_Ex::isBlank($this->arrErr)) {
$this->arrForm['sql_id'] = $this->lfUpdData($objFormParam->getValue('sql_id'), $objFormParam->getDbArray());
$this->tpl_onload = "alert('登録が完了しました。');";
if(SC_Utils_Ex::isBlank($this->arrErr)) {
$this->sqlerr = $this->lfCheckSQL($objFormParam->getValue('csv_sql'));
$this->setTemplate('contents/csv_sql_view.tpl');
SC_Response_Ex::reload();
if(SC_Utils_Ex::isBlank($this->arrErr)) {
$this->lfDelData($objFormParam->getValue('sql_id'));
SC_Response_Ex::reload();
if(SC_Utils_Ex::isBlank($this->arrErr)) {
$this->arrErr = $objFormParam->checkError();
if(SC_Utils_Ex::isBlank($this->arrErr)) {
$this->arrColList = $this->lfGetColList($objFormParam->getValue('select_table'));
* @param array $objFormParam フォームパラメータークラス
$objFormParam->addParam('SQL ID', 'sql_id', INT_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
$objFormParam->addParam('CSV出力対象SQL ID', 'csv_output_id', INT_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"), "", false);
$objFormParam->addParam('選択テーブル', 'select_table', STEXT_LEN, 'KVa', array("GRAPH_CHECK","MAX_LENGTH_CHECK"), "", false);
$objFormParam->addParam('名称', 'sql_name', STEXT_LEN, 'KVa', array("MAX_LENGTH_CHECK","SPTAB_CHECK"));
$objFormParam->addParam('SQL文', 'csv_sql', "30000", 'KVa', array("MAX_LENGTH_CHECK","SPTAB_CHECK"));
* @param array $objFormParam フォームパラメータークラス
$arrErr = $objFormParam->checkError();
$objErr = new SC_CheckError_Ex($objFormParam->getHashArray());
$objErr->doFunc( array("名称", "sql_name"), array("EXIST_CHECK") );
$objErr->doFunc( array("SQL文", "csv_sql", "30000"), array("EXIST_CHECK", "MAX_LENGTH_CHECK") );
$objErr->doFunc( array('SQL文には読み込み関係以外のSQLコマンドおよび";"記号', 'csv_sql', $this->lfGetSqlDenyList()), array("PROHIBITED_STR_CHECK"));
if(!SC_Utils_Ex::isBlank($objErr->arrErr)) {
if(SC_Utils_Ex::isBlank($arrErr)) {
$sql_error = $this->lfCheckSQL($objFormParam->getValue('csv_sql'));
if(!SC_Utils_Ex::isBlank($sql_error)) {
$arrErr["csv_sql"] = "※ SQL文が不正です。SQL文を見直してください";
* @param array $objFormParam フォームパラメータークラス
$arrErr = $objFormParam->checkError();
$objErr = new SC_CheckError_Ex($objFormParam->getHashArray());
$objErr->doFunc( array("SQL文", "csv_sql", "30000"), array("EXIST_CHECK", "MAX_LENGTH_CHECK") );
$objErr->doFunc( array('SQL文には読み込み関係以外のSQLコマンドおよび";"記号', 'csv_sql', $this->lfGetSqlDenyList()), array("PROHIBITED_STR_CHECK"));
if(!SC_Utils_Ex::isBlank($objErr->arrErr)) {
* @param array $objFormParam フォームパラメータークラス
$arrErr = $objFormParam->checkError();
$objErr = new SC_CheckError_Ex($objFormParam->getHashArray());
$objErr->doFunc( array("SQL ID", "sql_id"), array("EXIST_CHECK") );
if(!SC_Utils_Ex::isBlank($objErr->arrErr)) {
* @param array $objFormParam フォームパラメータークラス
$arrErr = $objFormParam->checkError();
$objErr = new SC_CheckError_Ex($objFormParam->getHashArray());
$objErr->doFunc( array("CSV出力対象SQL ID", "csv_output_id"), array("EXIST_CHECK") );
if(!SC_Utils_Ex::isBlank($objErr->arrErr)) {
$objQuery = & SC_Query_Ex::getSingletonInstance();
// 実テーブル上のカラム設定を見に行く仕様に変更 ref #476
$arrTable = $objQuery->listTables();
if(SC_Utils_Ex::isBlank($arrTable)) {
foreach($arrTable as $table) {
if(substr($table, 0, 4) == 'dtb_') {
$arrRet[ $table ] = 'データテーブル: ' . $table;
}else if(substr($table, 0, 4) == 'mtb_') {
$arrRet[ $table ] = 'マスターテーブル: ' . $table;
}else if(substr($table, 0, 3) == 'vw_') {
$arrRet[ $table ] = 'ビュー: ' . $table;
* @param string $selectTable テーブル名
if(SC_Utils_Ex::isBlank($table)) {
$objQuery = & SC_Query_Ex::getSingletonInstance();
// 実テーブル上のカラム設定を見に行く仕様に変更 ref #476
$arrColList = $objQuery->listTableFields($table);
$arrColList= SC_Utils_Ex::sfArrCombine($arrColList, $arrColList);
* @param string $where Where句
* @param array $arrVal 絞り込みデータ
$objQuery = & SC_Query_Ex::getSingletonInstance();
$objQuery->setOrder('sql_id');
return $objQuery->select('*', $table, $where, $arrVal);
* 入力されたSQL文が正しく実行出来るかのチェックを行う.
* @param string SQL文データ(頭にSELECTは入れない)
// FIXME: 意図的に new SC_Query しています。 force_runをtrueにする必要があるので.本当はqueryの引数で制御したい。ref SC_Query
$objQuery = new SC_Query_Ex("", true);
$sql = "SELECT " . $sql . " ";
$objErrMsg = $objQuery->query($sql);
if (PEAR::isError($objErrMsg)){
$err = $objErrMsg->message . "\n" . $objErrMsg->userinfo;
* SQL詳細設定情報呼び出し (編集中データがある場合はそれを保持する)
* @param array $objFormParam フォームパラメータークラス
* @return mixed 表示用パラメーター
if(!SC_Utils_Ex::isBlank($objFormParam->getValue('sql_name'))
or !SC_Utils_Ex::isBlank($objFormParam->getValue('csv_sql'))) {
return $objFormParam->getHashArray();
$sql_id = $objFormParam->getValue('sql_id');
if(!SC_Utils_Ex::isBlank($sql_id)) {
$arrData = $this->lfGetSqlList('sql_id = ?', array($sql_id));
* @param integer $sql_id 出力するデータのSQL_ID
$arrData = $this->lfGetSqlList('sql_id = ?', array($sql_id));
$sql = "SELECT " . $arrData[0]['csv_sql'] . " ";
// TODO: ヘッダ取得 SQL内にLIMIT文がある場合はLIMIT句は追加しないので重いかも
$objQuery = & SC_Query_Ex::getSingletonInstance();
$head_sql = $sql . " LIMIT 0";
$arrData = $objQuery->getQueryDefsFields($head_sql, array(), true);
if(!SC_Utils_Ex::isBlank($arrData)) {
foreach($arrData as $key => $val) {
require_once CLASS_EX_REALDIR . 'helper_extends/SC_Helper_CSV_Ex.php';
$objCSV = new SC_Helper_CSV_Ex();
$objCSV->sfDownloadCsvFromSql($sql, array(), 'contents', $arrHeader, true);
* @param integer $sql_id 更新するデータのSQL_ID
* @param array $arrSqlVal 更新データの配列
* @return integer $sql_id SQL_IDを返す
$objQuery = & SC_Query_Ex::getSingletonInstance();
$arrSqlVal['update_date'] = 'CURRENT_TIMESTAMP';
if (SC_Utils_Ex::sfIsInt($sql_id)) {
$objQuery->update($table, $arrSqlVal, $where, array($sql_id));
$sql_id = $objQuery->nextVal('dtb_csv_sql_sql_id');
$arrSqlVal['sql_id'] = $sql_id;
$arrSqlVal['create_date'] = 'CURRENT_TIMESTAMP';
$objQuery->insert($table, $arrSqlVal);
* @param integer $sql_id 削除するデータのSQL_ID
* @return boolean 実行結果 true:成功
$objQuery = & SC_Query_Ex::getSingletonInstance();
if(SC_Utils_Ex::sfIsInt($sql_id)) {
$objQuery->delete($table, $where, array($sql_id));
* SQL文に含めることを許可しないSQLキーワード
* 基本的にEC-CUBEのデータを取得するために必要なコマンドしか許可しない。複数クエリも不可
* FIXME: キーワードの精査。危険な部分なのでプログラム埋め込みで実装しました。mtb化の有無判断必要。
// ,'REINDEX\s' // REINDEXは許可で良いかなと
Documentation generated on Fri, 24 Feb 2012 14:01:09 +0900 by Seasoft
|