diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index eea9090ba0..8b1e40cdbb 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -108,6 +108,11 @@ jobs: FORCE_COLOR: 1 run: yarn ${PATTERN} e2e-tests/${GROUP} + - name: Print error log + if: always() + continue-on-error: true + run: docker compose exec ec-cube tail -n 100 data/logs/error.log + - name: Upload evidence if: failure() uses: actions/upload-artifact@v4 diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index 09a8bcea83..ce77157935 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -80,6 +80,11 @@ jobs: - name: Run to PHPUnit SessionFactory run: docker compose exec -T ec-cube php data/vendor/bin/phpunit tests/class/SC_SessionFactoryTest.php + - name: Print error log + if: always() + continue-on-error: true + run: docker compose exec ec-cube tail -n 100 data/logs/error.log + - name: Upload logs if: failure() uses: actions/upload-artifact@v4 diff --git a/data/Smarty/templates/admin/system/subnavi.tpl b/data/Smarty/templates/admin/system/subnavi.tpl index 6f0f59b5e9..19a9982e61 100644 --- a/data/Smarty/templates/admin/system/subnavi.tpl +++ b/data/Smarty/templates/admin/system/subnavi.tpl @@ -30,5 +30,4 @@ class="on" id="navi-system-adminarea">管理画面設定 class="on" id="navi-system-system">システム情報 class="on" id="navi-system-log">EC-CUBE ログ表示 - class="on" id="navi-system-editdb">高度なデータベース管理 diff --git a/data/class/SC_View.php b/data/class/SC_View.php index bab1244bc6..27cc188dd6 100644 --- a/data/class/SC_View.php +++ b/data/class/SC_View.php @@ -40,7 +40,6 @@ public function __construct() public function init() { - // include_phpの利用のためSmartyBCを呼び出す、ホントはinclude_phpをなくしたいそうすれば、blank.tplもなくせる $this->_smarty = new \Smarty\Smarty(); $this->_smarty->setLeftDelimiter(''); @@ -74,6 +73,7 @@ public function init() $this->_smarty->registerPlugin('function', 'sfIsHTTPS', ['SC_Utils_Ex', 'sfIsHTTPS']); $this->_smarty->registerPlugin('function', 'sfSetErrorStyle', ['SC_Utils_Ex', 'sfSetErrorStyle']); $this->_smarty->registerPlugin('function', 'printXMLDeclaration', ['GC_Utils_Ex', 'printXMLDeclaration']); + $this->_smarty->muteUndefinedOrNullWarnings(); $this->_smarty->default_modifiers = ['script_escape']; if (ADMIN_MODE == '1') { diff --git a/data/class/pages/admin/system/LC_Page_Admin_System_Editdb.php b/data/class/pages/admin/system/LC_Page_Admin_System_Editdb.php deleted file mode 100644 index 50de0ba67b..0000000000 --- a/data/class/pages/admin/system/LC_Page_Admin_System_Editdb.php +++ /dev/null @@ -1,212 +0,0 @@ -tpl_mainpage = 'system/editdb.tpl'; - $this->tpl_subno = 'editdb'; - $this->tpl_mainno = 'system'; - $this->tpl_maintitle = 'システム設定'; - $this->tpl_subtitle = '高度なデータベース管理'; - } - - /** - * Page のプロセス. - * - * @return void - */ - public function process() - { - $this->action(); - $this->sendResponse(); - } - - /** - * Page のアクション. - * - * @return void - */ - public function action() - { - $objFormParam = new SC_FormParam_Ex(); - - // パラメーターの初期化 - $this->initForm($objFormParam, $_POST); - - switch ($this->getMode()) { - case 'confirm' : - $message = $this->lfDoChange($objFormParam); - if (!is_array($message) && $message != '') { - $this->tpl_onload = $message; - } - break; - default: - break; - } - - // インデックスの現在値を取得 - $this->arrForm = $this->lfGetIndexList(); - } - - /** - * フォームパラメーター初期化 - * - * @param SC_FormParam_Ex $objFormParam - * @param array $arrParams $_POST値 - * - * @return void - */ - public function initForm(&$objFormParam, &$arrParams) - { - $objFormParam->addParam('モード', 'mode', INT_LEN, 'n', ['ALPHA_CHECK', 'MAX_LENGTH_CHECK']); - $objFormParam->addParam('テーブル名', 'table_name'); - $objFormParam->addParam('カラム名', 'column_name'); - $objFormParam->addParam('インデックス', 'indexflag'); - $objFormParam->addParam('インデックス(変更後)', 'indexflag_new'); - $objFormParam->setParam($arrParams); - } - - /** - * @param SC_FormParam_Ex $objFormParam - */ - public function lfDoChange(&$objFormParam) - { - $objQuery = SC_Query_Ex::getSingletonInstance(); - $arrTarget = $this->lfGetTargetData($objFormParam); - $message = ''; - if (is_array($arrTarget) && count($arrTarget) == 0) { - $message = "window.alert('変更対象となるデータはありませんでした。');"; - - return $message; - } elseif (!is_array($arrTarget) && $arrTarget != '') { - return $arrTarget; // window.alert が返ってきているはず。 - } - - // 変更対象の設定変更 - foreach ($arrTarget as $item) { - $index_name = $item['table_name'].'_'.$item['column_name'].'_key'; - $arrField = ['fields' => [$item['column_name'] => []]]; - if ($item['indexflag_new'] == '1') { - $objQuery->createIndex($item['table_name'], $index_name, $arrField); - } else { - $objQuery->dropIndex($item['table_name'], $index_name); - } - } - $message = "window.alert('インデックスの変更が完了しました。');"; - - return $message; - } - - /** - * @param SC_FormParam_Ex $objFormParam - */ - public function lfGetTargetData(&$objFormParam) - { - $objQuery = SC_Query_Ex::getSingletonInstance(); - $arrIndexFlag = $objFormParam->getValue('indexflag'); - $arrIndexFlagNew = $objFormParam->getValue('indexflag_new'); - $arrTableName = $objFormParam->getValue('table_name'); - $arrColumnName = $objFormParam->getValue('column_name'); - $arrTarget = []; - $message = ''; - - // 変更されている対象を走査 - for ($i = 1; $i <= count($arrIndexFlag); $i++) { - // 入力値チェック - $param = [ - 'indexflag' => $arrIndexFlag[$i], - 'indexflag_new' => $arrIndexFlagNew[$i], - 'table_name' => $arrTableName[$i], - 'column_name' => $arrColumnName[$i], - ]; - $objErr = new SC_CheckError_Ex($param); - $objErr->doFunc(['インデックス('.$i.')', 'indexflag', INT_LEN], ['NUM_CHECK']); - $objErr->doFunc(['インデックス変更後('.$i.')', 'indexflag_new', INT_LEN], ['NUM_CHECK']); - $objErr->doFunc(['インデックス変更後('.$i.')', 'indexflag_new', INT_LEN], ['NUM_CHECK']); - $objErr->doFunc(['テーブル名('.$i.')', 'table_name', STEXT_LEN], ['GRAPH_CHECK', 'EXIST_CHECK', 'MAX_LENGTH_CHECK']); - $objErr->doFunc(['カラム名('.$i.')', 'column_name', STEXT_LEN], ['GRAPH_CHECK', 'EXIST_CHECK', 'MAX_LENGTH_CHECK']); - $arrErr = $objErr->arrErr; - if (count($arrErr) != 0) { - // 通常の送信ではエラーにならないはずです。 - $message = "window.alert('不正なデータがあったため処理を中断しました。');"; - - return $message; - } - if ($param['indexflag'] != $param['indexflag_new']) { - // 入力値がデータにある対象テーブルかのチェック - if ($objQuery->exists('dtb_index_list', 'table_name = ? and column_name = ?', [$param['table_name'], $param['column_name']])) { - $arrTarget[] = $param; - } - } - } - - return $arrTarget; - } - - /** - * インデックス設定を行う一覧を返す関数 - * - * @return array - */ - public function lfGetIndexList() - { - // データベースからインデックス設定一覧を取得する - $objQuery = SC_Query_Ex::getSingletonInstance(); - $objQuery->setOrder('table_name, column_name'); - $arrIndexList = $objQuery->select('table_name , column_name , recommend_flg, recommend_comment', 'dtb_index_list'); - - $table = ''; - $arrIndexes = []; - foreach ($arrIndexList as $key => $arrIndex) { - // テーブルに対するインデックス一覧を取得 - if ($table !== $arrIndex['table_name']) { - $table = $arrIndex['table_name']; - $arrIndexes = $objQuery->listTableIndexes($table); - } - // インデックスが設定されているかを取得 - $idx_name = $table.'_'.$arrIndex['column_name'].'_key'; - if (is_array($arrIndexes) && array_search($idx_name, $arrIndexes) === false) { - $arrIndexList[$key]['indexflag'] = ''; - } else { - $arrIndexList[$key]['indexflag'] = '1'; - } - } - - return $arrIndexList; - } -} diff --git a/html/admin/system/editdb.php b/html/admin/system/editdb.php deleted file mode 100644 index 0aea5a39b1..0000000000 --- a/html/admin/system/editdb.php +++ /dev/null @@ -1,28 +0,0 @@ -init(); -$objPage->process();