/** * Page を初期化する. * * @return void */ function init() { $this->template = MAIN_FRAME; //IP制限チェック $allow_hosts = unserialize(ADMIN_ALLOW_HOSTS); if (is_array($allow_hosts) && count($allow_hosts) > 0) { if (array_search($_SERVER["REMOTE_ADDR"], $allow_hosts) === FALSE) { SC_Utils_Ex::sfDispError(AUTH_ERROR); } } //SSL制限チェック if (ADMIN_FORCE_SSL == TRUE) { if (SC_Utils_Ex::sfIsHTTPS() === false) { SC_Response_Ex::sendRedirect($_SERVER["REQUEST_URI"], $_GET, FALSE, TRUE); } } $this->tpl_authority = $_SESSION['authority']; // ディスプレイクラス生成 $this->objDisplay = new SC_Display_Ex(); // プラグインクラス生成 $this->objPlagin = new SC_Helper_Plugin_Ex(); $this->objPlagin->preProcess($this); // トランザクショントークンの検証と生成 $this->doValidToken(true); $this->setTokenTo(); }
/** * Page のアクション. * * @return void */ public function action() { // パラメーター管理クラス $objFormParam = new SC_FormParam_Ex(); switch ($this->getMode()) { case 'login': //ログイン処理 $this->lfInitParam($objFormParam); $objFormParam->setParam($_POST); $this->arrErr = $this->lfCheckError($objFormParam); if (SC_Utils_Ex::isBlank($this->arrErr)) { $this->lfDoLogin($objFormParam->getValue('login_id')); SC_Response_Ex::sendRedirect(ADMIN_HOME_URLPATH); } else { // ブルートフォースアタック対策 // ログイン失敗時に遅延させる sleep(LOGIN_RETRY_INTERVAL); SC_Utils_Ex::sfDispError(LOGIN_ERROR); } break; default: break; } // 管理者ログインテンプレートフレームの設定 $this->setTemplate(LOGIN_FRAME); }
/** * CSVファイルを送信する * * @param integer $csv_id * CSVフォーマットID * @param string $where * WHERE条件文 * @param array $arrVal * プリペアドステートメントの実行時に使用される配列。配列の要素数は、クエリ内のプレースホルダの数と同じでなければなりません。 * @param string $order * ORDER文 * @param boolean $is_download * true:ダウンロード用出力までさせる false:CSVの内容を返す(旧方式、メモリを食います。) * @return boolean|string $is_download = true時 成功失敗フラグ(boolean) 、$is_downalod = false時 string */ public function sfDownloadCsv($csv_id, $where = '', $arrVal = array(), $order = '', $is_download = false) { switch ($csv_id) { case 1: case 2: case 3: case 4: case 5: return parent::sfDownloadCsv($csv_id, $where, $arrVal, $order, $is_download); } $objQuery =& SC_Query_Ex::getSingletonInstance(); // CSV出力タイトル行の作成 $arrOutput = SC_Utils_Ex::sfSwapArray($this->sfGetCsvOutput($csv_id, 'status = ' . CSV_COLUMN_STATUS_FLG_ENABLE)); if (count($arrOutput) <= 0) { SC_Utils_Ex::sfDispError(""); return false; // 失敗終了 } $arrOutputCols = $arrOutput['col']; $cols = SC_Utils_Ex::sfGetCommaList($arrOutputCols, true); switch ($csv_id) { case 6: // キャラクター $from = 'cp_dtb_character'; break; case 7: // 端末 $from = 'cp_dtb_device'; break; } $objQuery->setOrder($order); $sql = $objQuery->getSql($cols, $from, $where); return $this->sfDownloadCsvFromSql($sql, $arrVal, $this->arrSubnavi[$csv_id], $arrOutput['disp_name'], $is_download); }
/** * Page のプロセス. * * @return void */ function process() { $conn = new SC_DBConn(); $this->objSess = new SC_Session(); $ret = false; if (!isset($_POST['login_id'])) { $_POST['login_id'] = ""; } if (!isset($_POST['password'])) { $_POST['password'] = ""; } // 入力判定 if (strlen($_POST['login_id']) > 0 && strlen($_POST['password']) >= ID_MIN_LEN && strlen($_POST['password']) <= ID_MAX_LEN) { // 認証パスワードの判定 $ret = $this->fnCheckPassword($conn); } if ($ret) { // 成功 $this->sendRedirect($this->getLocation(URL_HOME)); exit; } else { // エラーページの表示 SC_Utils_Ex::sfDispError(LOGIN_ERROR); exit; } }
/** * Page を初期化する. * * @return void */ function init() { $this->template = MAIN_FRAME; //IP制限チェック $allow_hosts = unserialize(ADMIN_ALLOW_HOSTS); if (is_array($allow_hosts) && count($allow_hosts) > 0) { if (array_search($_SERVER['REMOTE_ADDR'], $allow_hosts) === FALSE) { SC_Utils_Ex::sfDispError(AUTH_ERROR); } } //SSL制限チェック if (ADMIN_FORCE_SSL == TRUE) { if (SC_Utils_Ex::sfIsHTTPS() === false) { SC_Response_Ex::sendRedirect($_SERVER['REQUEST_URI'], $_GET, FALSE, TRUE); } } $this->tpl_authority = $_SESSION['authority']; // ディスプレイクラス生成 $this->objDisplay = new SC_Display_Ex(); // スーパーフックポイントを実行. $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance($this->plugin_activate_flg); $objPlugin->doAction('LC_Page_preProcess', array($this)); // トランザクショントークンの検証と生成 $this->doValidToken(true); $this->setTokenTo(); // ローカルフックポイントを実行 $parent_class_name = get_parent_class($this); $objPlugin->doAction($parent_class_name . '_action_before', array($this)); $class_name = get_class($this); if ($class_name != $parent_class_name) { $objPlugin->doAction($class_name . '_action_before', array($this)); } }
/** * マスターデータ名チェックを行う * * @access private * @param array $arrMasterDataName * マスターデータテーブル名のリスト * @return string $master_data_name 選択しているマスターデータのテーブル名 */ public function checkMasterDataName(&$arrParams, &$arrMasterDataName) { if (in_array($arrParams['master_data_name'], $arrMasterDataName)) { $master_data_name = $arrParams['master_data_name']; return $master_data_name; } else { SC_Utils_Ex::sfDispError(''); } }
/** * Page のアクション. * * @return void */ function action() { $objFormParam = new SC_FormParam_Ex(); // パラメーターの初期化 $this->initParam($objFormParam, $_GET); // パラメーターの検証 if ($objFormParam->checkError() || !SC_Utils_ex::sfIsInt($id = $objFormParam->getValue('id'))) { GC_Utils_Ex::gfPrintLog("error id={$id}"); SC_Utils_Ex::sfDispError(INVALID_MOVE_ERRORR); } $id = $objFormParam->getValue('id'); // レコードの削除 $this->deleteMember($id); // リダイレクト $url = $this->getLocation(ADMIN_SYSTEM_URLPATH) . '?pageno=' . $objFormParam->getValue('pageno'); SC_Response_Ex::sendRedirect($url); }
/** * Page のアクション. * * @return void */ public function action() { switch ($this->getMode()) { case 'detail': $objForm = $this->initParam(); if ($objForm->checkError()) { SC_Utils_Ex::sfDispError(''); } $this->arrLogDetail = $this->getLogDetail($objForm->getValue('log_id')); if (count($this->arrLogDetail) == 0) { SC_Utils_Ex::sfDispError(''); } $this->tpl_mainpage = 'ownersstore/log_detail.tpl'; break; default: break; } $this->arrInstallLogs = $this->getLogs(); }
/** * Page のアクション. * * @return void */ public function action() { switch ($this->getMode()) { default: // フォーム操作クラス $objFormParam = new SC_FormParam_Ex(); // パラメーター情報の初期化 $this->lfInitParam($objFormParam); $objFormParam->setParam($_GET); $objFormParam->convParam(); // 表示するファイルにエラーチェックを行う if ($this->checkErrorDispFile($objFormParam)) { $this->execFileView($objFormParam); } else { SC_Utils_Ex::sfDispError(''); } SC_Response_Ex::actionExit(); break; } }
/** * Page のプロセス. * * @return void */ function process() { // 認証可否の判定 $objSess = new SC_Session(); SC_Utils_Ex::sfIsSuccess($objSess); $this->initParam(); // パラメータの検証 if ($this->objForm->checkError() || !SC_Utils_ex::sfIsInt($id = $this->objForm->getValue('id'))) { GC_Utils_Ex::gfPrintLog("error id={$id}"); SC_Utils_Ex::sfDispError(INVALID_MOVE_ERRORR); } $id = $this->objForm->getValue('id'); // レコードの削除 $objQuery =& new SC_Query(); $objQuery->begin(); $this->renumberRank($objQuery, $id); $this->deleteRecode($objQuery, $id); $objQuery->commit(); // リダイレクト $url = $this->getLocation(URL_SYSTEM_TOP) . '?pageno=' . $this->objForm->getValue('pageno'); $this->sendRedirect($url); }
/** * Page のプロセス. * * @return void */ function process() { // FIXME パスのチェック関数が必要 if (preg_match('|\\./|', $_GET['file'])) { SC_Utils_Ex::sfDispError(''); } // ユーザー認証 SC_Utils_Ex::sfIsSuccess(new SC_Session()); // ソースとして表示するファイルを定義(直接実行しないファイル) $arrViewFile = array('html', 'htm', 'tpl', 'php', 'css', 'js'); // 拡張子取得 $arrResult = split('\\.', $_GET['file']); $ext = $arrResult[count($arrResult) - 1]; // ファイル内容表示 if (in_array($ext, $arrViewFile)) { $objFileManager = new SC_Helper_FileManager_Ex(); // ファイルを読み込んで表示 header("Content-type: text/plain\n\n"); print $objFileManager->sfReadFile(USER_PATH . $_GET['file']); } else { $this->sendRedirect(USER_URL . $_GET['file']); exit; } }
/** * Page のアクション. * * @return void */ public function action() { $objFormParam = new SC_FormParam_Ex(); $this->lfInitParam($objFormParam); $objFormParam->setParam($_REQUEST); $objFormParam->convParam(); $this->device_type_id = $objFormParam->getValue('device_type_id', DEVICE_TYPE_PC); $this->tpl_select = $this->getTemplateName($this->device_type_id); $template_code = $objFormParam->getValue('template_code'); switch ($this->getMode()) { // 登録ボタン押下時 case 'register': $this->arrErr = $objFormParam->checkError(); if (SC_Utils_Ex::isBlank($this->arrErr)) { if ($this->doRegister($template_code, $this->device_type_id)) { $this->tpl_select = $template_code; $this->tpl_onload = "alert('登録が完了しました。');"; } } break; // 削除ボタン押下時 // 削除ボタン押下時 case 'delete': if ($objFormParam->checkError()) { SC_Utils_Ex::sfDispError(''); } $this->arrErr = $objFormParam->checkError(); if (SC_Utils_Ex::isBlank($this->arrErr)) { if ($this->doDelete($template_code, $this->device_type_id)) { $this->tpl_onload = "alert('削除が完了しました。');"; } } break; // downloadボタン押下時 // downloadボタン押下時 case 'download': $this->arrErr = $objFormParam->checkError(); if (SC_Utils_Ex::isBlank($this->arrErr)) { if ($this->doDownload($template_code) !== false) { // ブラウザに出力し, 終了する SC_Response_Ex::actionExit(); } } break; default: break; } $this->templates = $this->getAllTemplates($this->device_type_id); $this->tpl_subtitle = $this->arrDeviceType[$this->device_type_id] . '>' . $this->tpl_subtitle; }
/** * Page のプロセス. * * @return void */ function process() { $conn = new SC_DBConn(); $objView = new SC_AdminView(); $objQuery = new SC_Query(); $objDb = new SC_Helper_DB_Ex(); // 認証可否の判定 $objSess = new SC_Session(); SC_Utils_Ex::sfIsSuccess($objSess); $get_check = false; // 規格IDのチェック if (SC_Utils_Ex::sfIsInt($_GET['class_id'])) { // 規格名の取得 $this->tpl_class_name = $objQuery->get("dtb_class", "name", "class_id = ?", array($_GET['class_id'])); if ($this->tpl_class_name != "") { // 規格IDの引き継ぎ $this->arrHidden['class_id'] = $_GET['class_id']; $get_check = true; } } if (!$get_check) { // 規格登録ページに飛ばす。 $this->sendRedirect($this->getLocation(URL_CLASS_REGIST)); exit; } if (!isset($_POST['mode'])) { $_POST['mode'] = ""; } if (isset($_POST['class_id'])) { if (!SC_Utils_Ex::sfIsInt($_POST['class_id'])) { SC_Utils_Ex::sfDispError(""); } } // 新規作成 or 編集 switch ($_POST['mode']) { // 登録ボタン押下 case 'edit': // POST値の引き継ぎ $this->arrForm = $_POST; // 入力文字の変換 $_POST = $this->lfConvertParam($_POST); // エラーチェック $this->arrErr = $this->lfErrorCheck(); if (count($this->arrErr) <= 0) { if ($_POST['classcategory_id'] == "") { $this->lfInsertClass(); // DBへの書き込み } else { $this->lfUpdateClass(); // DBへの書き込み } // 再表示 $this->reload($_GET['class_id']); //sfReload("class_id=" . $_GET['class_id']); } else { // POSTデータを引き継ぐ $this->tpl_classcategory_id = $_POST['classcategory_id']; } break; // 削除 // 削除 case 'delete': // ランク付きレコードの削除 $where = "class_id = " . SC_Utils_Ex::sfQuoteSmart($_POST['class_id']); $objDb->sfDeleteRankRecord("dtb_classcategory", "classcategory_id", $_POST['classcategory_id'], $where, true); break; // 編集前処理 // 編集前処理 case 'pre_edit': // 編集項目をDBより取得する。 $where = "classcategory_id = ?"; $name = $objQuery->get("dtb_classcategory", "name", $where, array($_POST['classcategory_id'])); // 入力項目にカテゴリ名を入力する。 $this->arrForm['name'] = $name; // POSTデータを引き継ぐ $this->tpl_classcategory_id = $_POST['classcategory_id']; break; case 'down': $where = "class_id = " . SC_Utils_Ex::sfQuoteSmart($_POST['class_id']); $objDb->sfRankDown("dtb_classcategory", "classcategory_id", $_POST['classcategory_id'], $where); break; case 'up': $where = "class_id = " . SC_Utils_Ex::sfQuoteSmart($_POST['class_id']); $objDb->sfRankUp("dtb_classcategory", "classcategory_id", $_POST['classcategory_id'], $where); break; default: break; } // 規格分類の読込 $where = "del_flg <> 1 AND class_id = ?"; $objQuery->setorder("rank DESC"); $this->arrClassCat = $objQuery->select("name, classcategory_id", "dtb_classcategory", $where, array($_GET['class_id'])); $objView->assignobj($this); $objView->display(MAIN_FRAME); }
/** * CSVアップロードを実行します. * * @return void */ public function doUploadCsv(&$objFormParam, &$objUpFile) { // ファイルアップロードのチェック $this->arrErr['csv_file'] = $objUpFile->makeTempFile('csv_file'); if (strlen($this->arrErr['csv_file']) >= 1) { return; } $arrErr = $objUpFile->checkExists(); if (count($arrErr) > 0) { $this->arrErr = $arrErr; return; } // 一時ファイル名の取得 $filepath = $objUpFile->getTempFilePath('csv_file'); // CSVファイルの文字コード変換 $enc_filepath = SC_Utils_Ex::sfEncodeFile($filepath, CHAR_CODE, CSV_TEMP_REALDIR); // CSVファイルのオープン $fp = fopen($enc_filepath, 'r'); // 失敗した場合はエラー表示 if (!$fp) { SC_Utils_Ex::sfDispError(''); } // 登録先テーブル カラム情報の初期化 $this->lfInitTableInfo(); // 登録フォーム カラム情報 $this->arrFormKeyList = $objFormParam->getKeyList(); $objQuery =& SC_Query_Ex::getSingletonInstance(); $objQuery->begin(); // CSVからの読み込み、入力エラーチェック $errFlag = $this->lfReadCSVFile($objFormParam, $fp); if (!$errFlag) { rewind($fp); // CSVからの読み込み、保存 $errFlag = $this->lfReadCSVFile($objFormParam, $fp, $objQuery); } // 実行結果画面を表示 $this->tpl_mainpage = 'basis/device_android_edit_csv_complete.tpl'; fclose($fp); if ($errFlag) { $objQuery->rollback(); return; } $objQuery->commit(); // 商品件数カウント関数の実行 $this->objDb->sfCountCategory($objQuery); $this->objDb->sfCountMaker($objQuery); }
/** * Page のアクション. * * @return void */ function action() { $objFormParam = new SC_FormParam_Ex(); $this->lfInitParam($objFormParam); $objFormParam->setParam($_REQUEST); $objFormParam->convParam(); $this->device_type_id = $objFormParam->getValue('device_type_id', DEVICE_TYPE_PC); $this->tpl_select = $this->getTemplateName($this->device_type_id); $template_code = $objFormParam->getValue('template_code'); switch ($this->getMode()) { // 登録ボタン押下時 case 'register': $this->arrErr = $objFormParam->checkError(); if (SC_Utils_Ex::isBlank($this->arrErr)) { if ($this->doRegister($template_code, $this->device_type_id)) { $this->tpl_select = $template_code; $this->tpl_onload = "alert('" . t('c_Registration is complete._01') . "');"; } } break; // 削除ボタン押下時 // 削除ボタン押下時 case 'delete': if ($objFormParam->checkError()) { SC_Utils_Ex::sfDispError(''); } $this->arrErr = $objFormParam->checkError(); if (SC_Utils_Ex::isBlank($this->arrErr)) { if ($this->doDelete($template_code, $this->device_type_id)) { $this->tpl_onload = "alert('" . t('c_Deletion is complete._01') . "');"; } } break; // downloadボタン押下時 // downloadボタン押下時 case 'download': $this->arrErr = $objFormParam->checkError(); if (SC_Utils_Ex::isBlank($this->arrErr)) { if ($this->doDownload($template_code) !== false) { // ブラウザに出力し, 終了する SC_Response_Ex::actionExit(); } } break; default: break; } if (!$is_error) { $this->templates = $this->getAllTemplates($this->device_type_id); } else { // 画面にエラー表示しないため, ログ出力 GC_Utils_Ex::gfPrintLog('Error: ' . print_r($this->arrErr, true)); } $this->tpl_subtitle = $this->arrDeviceType[$this->device_type_id] . ' > ' . $this->tpl_subtitle; }
/** * Page のプロセス. * * @return void */ function process() { // 認証可否の判定 $objSession = new SC_Session(); SC_Utils::sfIsSuccess($objSession); // uniqidをテンプレートへ埋め込み $this->uniqid = $objSession->getUniqId(); $objView = new SC_AdminView(); switch ($this->lfGetMode()) { // 登録ボタン押下時 case 'register': // 画面遷移の正当性チェック if (!SC_Utils::sfIsValidTransition($objSession)) { sfDispError(''); } // パラメータ検証 $objForm = $this->lfInitRegister(); if ($objForm->checkError()) { SC_Utils_Ex::sfDispError(''); } $template_code = $objForm->getValue('template_code'); $this->tpl_select = $template_code; if ($template_code == "") { $template_code = "default"; } // DBへ使用するテンプレートを登録 $this->lfRegisterTemplate($template_code); // XXX コンパイルファイルのクリア処理を行う $objView->_smarty->clear_compiled_tpl(); // common.cssの内容を更新 $this->lfChangeCommonCss($template_code); // テンプレートのコピー $this->lfCopyTemplate($template_code); // ブロック位置を更新 $this->lfChangeBloc($template_code); // 完了メッセージ $this->tpl_onload = "alert('登録が完了しました。');"; break; // 削除ボタン押下時 // 削除ボタン押下時 case 'delete': // 画面遷移の正当性チェック if (!SC_Utils::sfIsValidTransition($objSession)) { SC_Utils::sfDispError(''); } // パラメータ検証 $objForm = $this->lfInitDelete(); if ($objForm->checkError()) { SC_Utils::sfDispError(''); } //現在使用中のテンプレートとデフォルトのテンプレートは削除できないようにする $template_code = $objForm->getValue('template_code_temp'); if ($template_code == TEMPLATE_NAME || $template_code == DEFAULT_TEMPLATE_NAME) { $this->tpl_onload = "alert('選択中のテンプレートは削除出来ません');"; break; } $this->lfDeleteTemplate($template_code); break; // downloadボタン押下時 // downloadボタン押下時 case 'download': // 画面遷移の正当性チェック if (!SC_Utils::sfIsValidTransition($objSession)) { SC_Utils::sfDispError(''); } // パラメータ検証 $objForm = $this->lfInitDownload(); $template_code = $objForm->getValue('template_code_temp'); // ユーザデータの下のファイルも保存する。 $from_dir = USER_TEMPLATE_PATH . $template_code . "/"; $to_dir = SMARTY_TEMPLATES_DIR . $template_code . "/_packages/"; SC_Utils::sfMakeDir($to_dir); SC_Utils::sfCopyDir($from_dir, $to_dir); SC_Helper_FileManager::downloadArchiveFiles(SMARTY_TEMPLATES_DIR . $template_code); break; // プレビューボタン押下時 // プレビューボタン押下時 case 'preview': break; default: break; } // defaultパラメータのセット $this->templates = $this->lfGetAllTemplates(); $this->now_template = TEMPLATE_NAME; // 画面の表示 $objView->assignobj($this); $objView->display(MAIN_FRAME); }
/** * POST アクセスの妥当性を検証する. * * 生成されたトランザクショントークンの妥当性を検証し, * 不正な場合はエラー画面へ遷移する. * * この関数は, 基本的に init() 関数で呼び出され, POST アクセスの場合は自動的に * トランザクショントークンを検証する. * ページによって検証タイミングなどを制御する必要がある場合は, この関数を * オーバーライドし, 個別に設定を行うこと. * * @access protected * @param boolean $is_admin 管理画面でエラー表示をする場合 true * @return void */ function doValidToken($is_admin = false) { if ($_SERVER["REQUEST_METHOD"] == 'POST') { if (!SC_Helper_Session_Ex::isValidToken(false)) { if ($is_admin) { SC_Utils_Ex::sfDispError(INVALID_MOVE_ERRORR); } else { SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, "", true); } exit; } } }
/** * CSVアップロードを実行します. * * @return void */ function doUploadCsv(&$objFormParam, &$objUpFile) { // ファイルアップロードのチェック $this->arrErr['csv_file'] = $objUpFile->makeTempFile('csv_file'); if (strlen($this->arrErr['csv_file']) >= 1) { return; } $arrErr = $objUpFile->checkExists(); if (count($arrErr) > 0) { $this->arrErr = $arrErr; return; } // 一時ファイル名の取得 $filepath = $objUpFile->getTempFilePath('csv_file'); // CSVファイルの文字コード変換 $enc_filepath = SC_Utils_Ex::sfEncodeFile($filepath, CHAR_CODE, CSV_TEMP_REALDIR); // CSVファイルのオープン $fp = fopen($enc_filepath, 'r'); // 失敗した場合はエラー表示 if (!$fp) { SC_Utils_Ex::sfDispError(''); } // 登録先テーブル カラム情報の初期化 $this->lfInitTableInfo(); // 登録フォーム カラム情報 $this->arrFormKeyList = $objFormParam->getKeyList(); // 登録対象の列数 $col_max_count = $objFormParam->getCount(); // 行数 $line_count = 0; $objQuery =& SC_Query_Ex::getSingletonInstance(); $objQuery->begin(); $errFlag = false; $all_line_checked = false; while (!feof($fp)) { $arrCSV = fgetcsv($fp, CSV_LINE_MAX); // 全行入力チェック後に、ファイルポインターを先頭に戻す if (feof($fp) && !$all_line_checked) { rewind($fp); $line_count = 0; $all_line_checked = true; continue; } // 行カウント $line_count++; // ヘッダ行はスキップ if ($line_count == 1) { continue; } // 空行はスキップ if (empty($arrCSV)) { continue; } // 列数が異なる場合はエラー $col_count = count($arrCSV); if ($col_max_count != $col_count) { $this->addRowErr($line_count, '※ 項目数が' . $col_count . '個検出されました。項目数は' . $col_max_count . '個になります。'); $errFlag = true; break; } // シーケンス配列を格納する。 $objFormParam->setParam($arrCSV, true); $arrRet = $objFormParam->getHashArray(); $objFormParam->setParam($arrRet); // 入力値の変換 $objFormParam->convParam(); // <br>なしでエラー取得する。 $arrCSVErr = $this->lfCheckError($objFormParam); // 入力エラーチェック if (count($arrCSVErr) > 0) { foreach ($arrCSVErr as $err) { $this->addRowErr($line_count, $err); } $errFlag = true; break; } if ($all_line_checked) { $this->lfRegistProduct($objQuery, $line_count, $objFormParam); $arrParam = $objFormParam->getHashArray(); $this->addRowResult($line_count, '商品ID:' . $arrParam['product_id'] . ' / 商品名:' . $arrParam['name']); } SC_Utils_Ex::extendTimeOut(); } // 実行結果画面を表示 $this->tpl_mainpage = 'products/upload_csv_complete.tpl'; fclose($fp); if ($errFlag) { $objQuery->rollback(); return; } $objQuery->commit(); // 商品件数カウント関数の実行 $this->objDb->sfCountCategory($objQuery); $this->objDb->sfCountMaker($objQuery); }
/** * CSVアップロードを実行する * * @param SC_FormParam $objFormParam * @param SC_UploadFile $objUpFile * @param SC_Helper_DB $objDb * @return void */ function doUploadCsv(&$objFormParam, &$objUpFile) { // ファイルアップロードのチェック $objUpFile->makeTempFile('csv_file'); $arrErr = $objUpFile->checkExists(); if (count($arrErr) > 0) { $this->arrErr = $arrErr; return; } // 一時ファイル名の取得 $filepath = $objUpFile->getTempFilePath('csv_file'); // CSVファイルの文字コード変換 $enc_filepath = SC_Utils_Ex::sfEncodeFile($filepath, CHAR_CODE, CSV_TEMP_REALDIR); // CSVファイルのオープン $fp = fopen($enc_filepath, 'r'); // 失敗した場合はエラー表示 if (!$fp) { SC_Utils_Ex::sfDispError(''); } // 登録先テーブル カラム情報の初期化 $this->lfInitTableInfo(); // 登録フォーム カラム情報 $this->arrFormKeyList = $objFormParam->getKeyList(); // 登録対象の列数 $col_max_count = $objFormParam->getCount(); // 行数 $line_count = 0; $objQuery =& SC_Query_Ex::getSingletonInstance(); $objQuery->begin(); $errFlag = false; while (!feof($fp)) { $arrCSV = fgetcsv($fp, CSV_LINE_MAX); // 行カウント $line_count++; // ヘッダ行はスキップ if ($line_count == 1) { continue; } // 空行はスキップ if (empty($arrCSV)) { continue; } // 列数が異なる場合はエラー $col_count = count($arrCSV); if ($col_max_count != $col_count) { $this->addRowErr($line_count, t('c_* T_ARG1 was detected for the item quantity. The item quantity is T_ARG2._01', array('T_ARG1' => $col_count, 'T_ARG2' => $col_max_count))); $errFlag = true; break; } // シーケンス配列を格納する。 $objFormParam->setParam($arrCSV, true); $arrRet = $objFormParam->getHashArray(); $objFormParam->setParam($arrRet); // 入力値の変換 $objFormParam->convParam(); // <br>なしでエラー取得する。 $arrCSVErr = $this->lfCheckError($objFormParam); // 入力エラーチェック if (count($arrCSVErr) > 0) { foreach ($arrCSVErr as $err) { $this->addRowErr($line_count, $err); } $errFlag = true; break; } $category_id = $this->lfRegistCategory($objQuery, $line_count, $objFormParam); $this->addRowResult($line_count, t('c_Category ID: T_ARG1 /Category name: T_ARG2_01', array('T_ARG1' => $category_id, 'T_ARG2' => $objFormParam->getValue('category_name')))); } // 実行結果画面を表示 $this->tpl_mainpage = 'products/upload_csv_category_complete.tpl'; fclose($fp); if ($errFlag) { $objQuery->rollback(); return; } $objQuery->commit(); // カテゴリ件数を更新 SC_Helper_DB_EX::sfCountCategory($objQuery); return; }
/** * POST アクセスの妥当性を検証する. * * 生成されたトランザクショントークンの妥当性を検証し, * 不正な場合はエラー画面へ遷移する. * * この関数は, 基本的に init() 関数で呼び出され, POST アクセスの場合は自動的に * トランザクショントークンを検証する. * ページによって検証タイミングなどを制御する必要がある場合は, この関数を * オーバーライドし, 個別に設定を行うこと. * * @access protected * @param boolean $is_admin 管理画面でエラー表示をする場合 true * @return void */ public function doValidToken($is_admin = false) { if ($is_admin) { $mode = $this->getMode(); if ($_SERVER['REQUEST_METHOD'] == 'POST' || !SC_Utils::isBlank($mode)) { if (!SC_Helper_Session_Ex::isValidToken(false)) { SC_Utils_Ex::sfDispError(INVALID_MOVE_ERRORR); SC_Response_Ex::actionExit(); } } } else { if ($_SERVER['REQUEST_METHOD'] == 'POST') { if (!SC_Helper_Session_Ex::isValidToken(false)) { SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, '', true); SC_Response_Ex::actionExit(); } } } }
/** * レビュー情報のDB取得 * * @param integer $review_id レビューID * @return array レビュー情報 */ function lfGetReviewData($review_id) { $objQuery =& SC_Query_Ex::getSingletonInstance(); $select = 'review_id, A.product_id, reviewer_name, sex, recommend_level, '; $select .= 'reviewer_url, title, comment, A.status, A.create_date, A.update_date, name'; $from = 'dtb_review AS A LEFT JOIN dtb_products AS B ON A.product_id = B.product_id '; $where = 'A.del_flg = 0 AND B.del_flg = 0 AND review_id = ? '; $arrReview = $objQuery->select($select, $from, $where, array($review_id)); if (empty($arrReview)) { SC_Utils_Ex::sfDispError(''); } return $arrReview[0]; }
/** * POST アクセスの妥当性を検証する. * * 生成されたトランザクショントークンの妥当性を検証し, * 不正な場合はエラー画面へ遷移する. * * この関数は, 基本的に init() 関数で呼び出され, POST アクセスの場合は自動的に * トランザクショントークンを検証する. * ページによって検証タイミングなどを制御する必要がある場合は, この関数を * オーバーライドし, 個別に設定を行うこと. * * @access protected * @param boolean $is_admin 管理画面でエラー表示をする場合 true * @return void */ function doValidToken($is_admin = false) { if ($_SERVER['REQUEST_METHOD'] == 'POST') { if (!SC_Helper_Session_Ex::isValidToken(false)) { if ($is_admin) { SC_Utils_Ex::sfDispError(INVALID_MOVE_ERRORR); } else { SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, '', true); } SC_Response_Ex::actionExit(); } } }
/** * registerアクションの実行. * 入力内容をDBへ登録する. * * @param void * @return void */ function execRegisterMode() { if ($this->isValidToken() !== true) { SC_Utils_Ex::sfDispError(''); } // パラメータオブジェクトの初期化 $this->initRegisterMode(); // POSTされたパラメータの検証 $arrErr = $this->validateRegistermode(); // エラー時の処理 if (!empty($arrErr)) { $this->arrErr = $arrErr; $this->arrForm = $this->objForm->getHashArray(); $this->transactionid = $this->getToken(); return; } // エラーがなければDBへ登録 $arrForm = $this->objForm->getHashArray(); $this->registerOwnersStoreSettings($arrForm); $this->arrForm = $arrForm; $this->tpl_onload = "alert('登録しました。')"; $this->transactionid = $this->getToken(); }
/** * レビュー情報のDB取得 * */ function lfGetReviewData($review_id) { $select = "review_id, A.product_id, reviewer_name, sex, recommend_level, "; $select .= "reviewer_url, title, comment, A.status, A.create_date, A.update_date, name"; $from = "dtb_review AS A LEFT JOIN dtb_products AS B ON A.product_id = B.product_id "; $where = "A.del_flg = 0 AND B.del_flg = 0 AND review_id = ? "; $arrReview = $this->objQuery->select($select, $from, $where, array($review_id)); if (empty($arrReview)) { SC_Utils_Ex::sfDispError(""); } return $arrReview[0]; }
/** * テキストファイルの文字エンコーディングを変換する. * * $filepath に存在するテキストファイルの文字エンコーディングを変換する. * 変換前の文字エンコーディングは, mb_detect_order で設定した順序で自動検出する. * 変換後は, 変換前のファイル名に「enc_」というプレフィクスを付与し, * $out_dir で指定したディレクトリへ出力する * * TODO $filepath のファイルがバイナリだった場合の扱い * TODO fwrite などでのエラーハンドリング * * @access public * @param string $filepath 変換するテキストファイルのパス * @param string $enc_type 変換後のファイルエンコーディングの種類を表す文字列 * @param string $out_dir 変換後のファイルを出力するディレクトリを表す文字列 * @return string 変換後のテキストファイルのパス */ function sfEncodeFile($filepath, $enc_type, $out_dir) { $ifp = fopen($filepath, 'r'); // 正常にファイルオープンした場合 if ($ifp !== false) { $basename = basename($filepath); $outpath = $out_dir . 'enc_' . $basename; $ofp = fopen($outpath, 'w+'); while (!feof($ifp)) { $line = fgets($ifp); $line = mb_convert_encoding($line, $enc_type, 'auto'); fwrite($ofp, $line); } fclose($ofp); fclose($ifp); } else { SC_Utils_Ex::sfDispError(''); exit; } return $outpath; }
function doPreEdit(SC_Query $objQuery, SC_FormParam &$objFormParam) { if (!SC_Utils_Ex::isBlank($this->arrErr)) { return; } $edit_device_id = $objFormParam->getValue("edit_device_id"); $arrHash = compact("edit_device_id"); $objSql = new SC_DeviceAndroidSelect_Ex($arrHash); if ($objSql->exists()) { $arrRet = $objSql->getOne(); GC_Utils_Ex::gfPrintLog(print_r($objSql, true), DEBUG_LOG_REALFILE); GC_Utils_Ex::gfPrintLog(print_r($arrRet, true), DEBUG_LOG_REALFILE); $arrRet["category_id"] = SC_Helper_Device_Ex::getCategoryIds($objQuery, $edit_device_id); $objFormParam->setParam($arrRet); GC_Utils_Ex::gfPrintLog(print_r($objFormParam->getHashArray(), true), DEBUG_LOG_REALFILE); GC_Utils_Ex::gfPrintLog(print_r($arrRet, true), DEBUG_LOG_REALFILE); } else { SC_Utils_Ex::sfDispError(""); } $arrDateColumn = $this->ARR_DATE_COLUMN; foreach ($arrDateColumn as $column) { if ($this->is1970($arrRet, $column)) { continue; } $date_keys = $this->date_keys($column); $value = $arrRet[$column]; $objFormParam->setDBDate($value, $date_keys["year"], $date_keys["month"], $date_keys["day"]); } GC_Utils_Ex::gfPrintLog(print_r($objFormParam->getHashArray(), true), DEBUG_LOG_REALFILE); $this->arrForm = $objFormParam->getHashArray(); }