function install(array $arrPlugin, SC_Plugin_Installer $installer)
 {
     $plugin_dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
     $upload_plugin_dir = PLUGIN_UPLOAD_REALDIR . $arrPlugin["plugin_code"] . DIRECTORY_SEPARATOR;
     $backup_plugin_dir = PLUGIN_UPLOAD_REALDIR . $arrPlugin["plugin_code"] . "_" . date("Ymd") . DIRECTORY_SEPARATOR;
     if (!is_dir($backup_plugin_dir)) {
         SC_Utils_Ex::sfCopyDir($upload_plugin_dir, $backup_plugin_dir);
     }
     SC_Helper_FileManager_Ex::deleteFile($upload_plugin_dir, false);
     SC_Utils_Ex::sfCopyDir($plugin_dir . "/", $upload_plugin_dir);
     SC_Utils_Ex::sfCopyDir($plugin_dir . "/copy/Smarty/templates/admin/", TEMPLATE_ADMIN_REALDIR);
     SC_Utils_Ex::sfCopyDir($plugin_dir . "/copy/modules/", DATA_REALDIR . "module/");
     // logo コピー
     $installer->copyDirectory("copy/plugin_dir/", "");
     $table = "dtb_products";
     $fields = array('auto_display_status' => $this->intColumn('自動公開'), 'auto_display_start_date' => $this->timestampColumn('公開開始日'), 'auto_display_end_date' => $this->timestampColumn('公開終了日'));
     $type = "timestamp";
     $definition = compact("type");
     foreach ($fields as $name => $define) {
         $this->objDb->sfColumnExists($table, $name, $define["type"], "", true);
         $this->fieldComment($installer, $table, $name, $define["comment"]);
         switch ($define["type"]) {
             case "timestamp":
                 break;
             default:
                 continue;
         }
         $change = array();
         $change[$name] = compact('definition');
         $this->objManager->alterTable($table, compact("change"), false);
     }
     $this->objQuery->update("dtb_products", array(), "auto_display_start_date IS NULL", array(), array("auto_display_start_date" => "create_date"));
     $masterfields = array("id" => $this->intColumn("ID"), "name" => $this->textColumn("NAME"), "rank" => $this->intColumn("RANK"));
     $table = "atd_mtb_auto_display_status";
     if ($this->objDb->sfColumnExists($table, "id") == false) {
         $this->objManager->createTable($table, $masterfields);
     }
     foreach ($masterfields as $name => $define) {
         $this->objDb->sfColumnExists($table, $name, $define["type"], "", true);
         $this->fieldComment($installer, $table, $name, $define["comment"]);
     }
     $this->masterdata->deleteMasterData($table);
     $this->masterdata->clearCache($table);
     $this->masterdata->registMasterData($table, array(), explode(",", "常時公開,時限公開"));
     // $this->insertMasterData ( "PRODUCTS_RESULT_ROWSPAN", 1, '管理画面/商品管理一覧 行結合数' );
     // $this->insertMasterData ( "PRODUCTS_RESULT_COLUMN", 5, '管理画面/商品管理一覧 列位置' );
     // $this->insertMasterData ( "PRODUCTS_SEARCH_AUTO_DISPLAY", 1, '検索画面表示設定(1: ON/ 0:OFF)' );
     // $this->insertMasterData ( "PRODUCTS_DETAIL_AUTO_DISPLAY", 1, '検索画面表示設定(1: ON/ 0:OFF)' );
 }
 /**
  * Page のプロセス.
  *
  * @return void
  */
 function process()
 {
     SC_Utils_Ex::sfIsSuccess(new SC_Session());
     $objView = new SC_AdminView();
     $this->arrMasterDataName = $this->getMasterDataNames(array("mtb_pref", "mtb_zip", "mtb_constants"));
     $masterData = new SC_DB_MasterData_Ex();
     if (!isset($_POST["mode"])) {
         $_POST["mode"] = "";
     }
     switch ($_POST["mode"]) {
         case "edit":
             // POST 文字列の妥当性チェック
             $this->checkMasterDataName();
             $this->errorMessage = $this->checkUniqueID();
             if (empty($this->errorMessage)) {
                 // 取得したデータからマスタデータを生成
                 $arrData = array();
                 foreach ($_POST['id'] as $key => $val) {
                     // ID が空のデータは生成しない
                     if ($val != "") {
                         $arrData[$val] = $_POST['name'][$key];
                     }
                 }
                 // マスタデータを更新
                 $masterData->objQuery = new SC_Query();
                 $masterData->objQuery->begin();
                 $masterData->deleteMasterData($this->masterDataName, false);
                 // TODO カラム名はメタデータから取得した方が良い
                 $masterData->registMasterData($this->masterDataName, array("id", "name", "rank"), $arrData, false);
                 $masterData->objQuery->commit();
                 $this->tpl_onload = "window.alert('マスタデータの設定が完了しました。');";
             }
         case "show":
             // POST 文字列の妥当性チェック
             $this->checkMasterDataName();
             // DB からマスタデータを取得
             $this->arrMasterData = $masterData->getDbMasterData($this->masterDataName);
             break;
         default:
     }
     $objView->assignobj($this);
     $objView->display(MAIN_FRAME);
 }
 /**
  * マスターデータの登録.
  *
  * @access private{
  * @param array $arrParams
  *            $_POST値
  * @param SC_DB_MasterData_Ex $masterData
  *            SC_DB_MasterData_Ex()
  * @param string $master_data_name
  *            登録対象のマスターデータのテーブル名
  * @return void
  */
 public function registMasterData($arrParams, &$masterData, $master_data_name)
 {
     $arrTmp = array();
     foreach ($arrParams['id'] as $key => $val) {
         // ID が空のデータは生成しない
         if ($val != '') {
             $arrTmp[$val] = $arrParams['name'][$key];
         }
     }
     // マスターデータを更新
     $masterData->objQuery =& SC_Query_Ex::getSingletonInstance();
     $masterData->objQuery->begin();
     $masterData->deleteMasterData($master_data_name, false);
     // TODO カラム名はメタデータから取得した方が良い
     $masterData->registMasterData($master_data_name, array('id', 'name', 'rank'), $arrTmp, false);
     $masterData->objQuery->commit();
 }