"", "result" => "", "form" => "", ); //---------------------------- // request parameter //---------------------------- $qProjectID = isset($_SESSION["project_id"]) ? $_SESSION["project_id"] : REQ_NON; $qToken = isset($_REQUEST["q_token"]) ? $_REQUEST["q_token"] : REQ_NON; $qKind = isset($_REQUEST["q_kind"]) ? $_REQUEST["q_kind"] : REQ_NON; $qID = isset($_REQUEST["q_id"]) ? $_REQUEST["q_id"] : REQ_NON; $qType = isset($_REQUEST["q_type"]) ? $_REQUEST["q_type"] : REQ_NON; $qName = isset($_REQUEST["q_name"]) ? $_REQUEST["q_name"] : REQ_NON; $qLangS = isset($_REQUEST["q_lang_s"]) ? $_REQUEST["q_lang_s"] : REQ_NON; $qLangT = isset($_REQUEST["q_lang_t"]) ? $_REQUEST["q_lang_t"] : REQ_NON; $qPublic = isset($_REQUEST["q_public"]) ? $_REQUEST["q_public"] : REQ_NON; $qImport = isset($_REQUEST["q_import"]) ? $_REQUEST["q_import"] : REQ_NON; $qCopyID = isset($_REQUEST["q_copy_id"]) ? $_REQUEST["q_copy_id"] : REQ_NON; $qExtermID = isset($_REQUEST["q_exterm_id"]) ? $_REQUEST["q_exterm_id"] : REQ_NON; //---------------------------- // judge post //---------------------------- $isPost = ($qToken !== REQ_NON); //---------------------------- // set types //---------------------------- Util::setType($qToken, "string"); Util::setType($qKind, "string"); Util::setType($qProjectID, "int"); Util::setType($qID, "int"); Util::setType($qType, "int"); Util::setType($qName, "string"); Util::setType($qLangS, "string"); Util::setType($qLangT, "string"); Util::setType($qPublic, "int"); Util::setType($qImport, "int"); Util::setType($qCopyID, "int"); Util::setType($qExtermID, "int"); //---------------------------- // Auth-Before validate //---------------------------- if ( $result === RES_OK ){ if ( $isPost ){ if ( ! Validate::isToken($qToken, "q_token") ){ $result = RES_NG; $gResult->push("{$WORD($wk, 1)}"); } } if ( ! Validate::inKeyArray($qKind, Term::KIND_TABLE()) ){ $result = RES_NG; $gResult->push("{$WORD($wk, 2)}"); } if ( $isPost ){ if ( ! Validate::isNumeric($qID) ){ $result = RES_NG; $gResult->push("{$WORD($wk, 3)}"); } } else { if ( ! Validate::isNumeric($qID) ){ $qID = INIT_ID; } } if ( ! Validate::isNumeric($qProjectID) ){ $result = RES_NG; $gResult->push("{$WORD($wk, 4)}"); } } if ( $result === RES_OK ){ if ( Validate::isNumeric($qExtermID) ){ $mode = MODE_EXTERM_NEW; $qID = INIT_ID; } else if ( Validate::isNumeric($qCopyID) ){ $mode = MODE_COPY; $qID = INIT_ID; } else if ( $qID === INIT_ID ){ $mode = MODE_NEW; } else { $mode = MODE_EDIT; } } //---------------------------- // Auth //---------------------------- if ( $result === RES_OK ){ $auth = Auth::instance("term_root", $qKind); $authExterm = Auth::instance("exterm"); if ( ! $auth->write($qID, $qProjectID) ){ $result = RES_NG; $gResult->push("{$WORD($wk, 5)}"); } if ( $mode === MODE_EXTERM_NEW && ! $authExterm->read($qExtermID, NULL) ){ $result = RES_NG; $gResult->push("{$WORD($wk, 6)}"); } // コピー元が読み込み可能か確認する if ( $mode === MODE_COPY && ! $auth->read($qCopyID, NULL) ){ $result = RES_NG; $gResult->push("{$WORD($wk, 7)}"); } $authImport = $auth->processImport($qID, $qProjectID); } //---------------------------- // Auth-After validate //---------------------------- if ( $result === RES_OK ){ if ( $isPost ){ if ( ! Validate::inKeyArray($qType, DAO::T_TERM_ROOT_TYPE_TABLE()) ){ $result = RES_NG; $gResult->push("{$WORD($wk, 8)}"); } if ( ! Validate::isString($qName) ){ if ( $qType === DAO::T_TERM_ROOT_TYPE_NORMAL ){ // 後でデフォルト名を取得する } else { $result = RES_NG; $gResult->push("{$WORD($wk, 9)}"); } } if ( ! Validate::isLang($qLangS) ){ $result = RES_NG; $gResult->push("{$WORD($wk, 10)}"); } if ( ! Validate::isLang($qLangT) ){ $result = RES_NG; $gResult->push("{$WORD($wk, 11)}"); } if ( ! Validate::inKeyArray($qPublic, DAO::T_TERM_ROOT_PUBLIC_TABLE()) ){ $result = RES_NG; $gResult->push("{$WORD($wk, 12)}"); } } if ( ! Validate::inKeyArray($qImport, $G_ONOFF_TABLE) ){ $qImport = OFF; } } if ( Validate::inKeyArray($qKind, Term::KIND_TABLE()) ){ $kindText = Term::KIND_TABLE($qKind); $kindChildText = Term::KIND_TABLE($qKind, FALSE); $kindSubText = Term::KIND_SUB_TABLE($qKind); } else { $kindText = Term::KIND_TABLE(Term::KIND_TERM); $kindChildText = ""; $kindSubText = Term::KIND_SUB_TABLE(Term::KIND_TERM); } //---------------------------- // process //---------------------------- if ( $result === RES_OK ){ DAO::begin(); $objDAOTermRoot = DAO::instance("term_root", $qKind); $objDAOTerm = DAO::instance("term", $qKind); $objDAOExterm = DAO::instance("exterm"); $objDAOProjectTermRoot = DAO::instance("project_term_root", $qKind); $objDAOProjectLang = DAO::instance("project_lang"); $objViewTermRoot = View::instance("term_root"); $defaultName = $objDAOTermRoot->getDefaultName($qProjectID, $qID); // 登録 -------------------- if ( $isPost ){ // 辞書 if ( $result === RES_OK ){ if ( ! Validate::isString($qName) && $qType === DAO::T_TERM_ROOT_TYPE_NORMAL ){ $qName = $defaultName; } $resDAOTermRoot = $objDAOTermRoot->register($qID, DAO::T_TERM_ROOT_STATE_NORMAL, $qPublic, $qName, $qLangS, $qLangT, $qProjectID); $result = $resDAOTermRoot["result"]; if ( $result === RES_OK ){ $qID = $resDAOTermRoot["id"]; } } // プロジェクト-辞書 if ( $result === RES_OK ){ $resDAOProjectTermRoot = $objDAOProjectTermRoot->get($qProjectID, $qID); if ( $resDAOProjectTermRoot["result"] === RES_OK ){ // 既に存在していれば削除する $resDAOProjectTermRoot = $objDAOProjectTermRoot->delete($qProjectID, $qID); $result = $resDAOProjectTermRoot["result"]; } if ( $result === RES_OK ){ $resDAOProjectTermRoot = $objDAOProjectTermRoot->register($qProjectID, $qID, User::get("id"), $qType); $result = $resDAOProjectTermRoot["result"]; } } //用語のコピー if ( $result === RES_OK && $mode === MODE_COPY ){ $resDAOTerm = $objDAOTerm->get($qCopyID); if ( $resDAOTerm["result"] === RES_OK ){ foreach ( $resDAOTerm["data"] as $dataDAOTerm ){ $textS = $dataDAOTerm["t_term_text_s"]; $textT = $dataDAOTerm["t_term_text_t"]; // Termの作成 $resDAOTermReg = $objDAOTerm->register(INIT_ID, $textS, $textT, $qID, User::get("id")); if ( $resDAOTermReg["result"] !== RES_OK ){ $result = RES_NG; break; } } } else if ( $resDAOTerm["result"] === RES_NO_DATA ){ // 用語登録なし } else { $result = RES_NG; } } // 用語抽出登録 if ( $result === RES_OK && $mode === MODE_EXTERM_NEW ){ $resDAOExterm = $objDAOExterm->register($qExtermID, DAO::T_EXTERM_STATE_NORMAL, NULL, NULL, NULL, $qID); if ( $resDAOExterm["result"] !== RES_OK ){ $result = RES_NG; break; } } if ( $result === RES_OK ){ switch ( $mode ){ case MODE_NEW: $gResult->push("{$WORD($wk, 13)}"); break; case MODE_EDIT: $gResult->push("{$WORD($wk, 14)}"); break; case MODE_COPY: $gResult->push("{$WORD($wk, 15)}"); break; case MODE_EXTERM_NEW: $gResult->push("{$WORD($wk, 16)}"); break; } } else { if ( isset($resDAOTermRoot["error"]) && $resDAOTermRoot["error"] === DAO_term_root::ERROR_NAME_DUPLICATE ){ $isPostRetry = TRUE; $gResult->push("{$WORD($wk, 17)}"); } else { $gResult->push("{$WORD($wk, 18)}"); } } } else { if ( $result === RES_OK ){ // 言語方向はプロジェクトから取得する $arrLangS = array(); $arrLangT = array(); $resDAOProjectLang = $objDAOProjectLang->get($qProjectID); if ( $resDAOProjectLang["result"] === RES_OK ){ foreach ( $resDAOProjectLang["data"] as $dataProjectLang ){ $langS = $dataProjectLang["t_project_lang_s"]; $langT = $dataProjectLang["t_project_lang_t"]; $arrLangS[$langS] = $G_LANG_TABLE[$langS]; $arrLangT[$langT] = $G_LANG_TABLE[$langT]; } } } if ( $result === RES_OK ){ switch ( $mode ){ // 新規 -------------------- case MODE_NEW: $qType = DAO::T_TERM_ROOT_TYPE_NORMAL; $qPublic = $objDAOTermRoot->getInit("t_term_root_public"); $qName = $objDAOTermRoot->getInit("t_term_root_name"); // 言語方向はプロジェクトから取得する $qLangS = key($arrLangS); $qLangT = key($arrLangT); break; // 編集 -------------------- case MODE_EDIT: $objDAOTermRoot->setAuth($auth); $resDAOTermRoot = $objDAOTermRoot->get($qID, DAO::T_TERM_ROOT_STATE_NORMAL); $result = $resDAOTermRoot["result"]; if ( $result === RES_OK ){ $dataDictionary = $resDAOTermRoot["data"][0]; $qPublic = $dataDictionary["t_term_root_public"]; $qName = $dataDictionary["t_term_root_name"]; $qLangS = $dataDictionary["t_term_root_lang_s"]; $qLangT = $dataDictionary["t_term_root_lang_t"]; $qType = DAO::storedFunction("get_project_{$qKind}_root_type", array($qProjectID, $qID)); $arrTabRight[] = $objViewTermRoot->title($dataDictionary); } else { $result = RES_NG; $gResult->push("{$WORD($wk, 19)}"); } break; // コピー -------------------- case MODE_COPY: $objDAOTermRoot->setAuth($auth); $resDAOTermRoot = $objDAOTermRoot->get($qCopyID, DAO::T_TERM_ROOT_STATE_NORMAL); $result = $resDAOTermRoot["result"]; if ( $result === RES_OK ){ $dataDictionary = $resDAOTermRoot["data"][0]; $qType = DAO::T_TERM_ROOT_TYPE_NORMAL; $qPublic = $dataDictionary["t_term_root_public"]; $qName = $dataDictionary["t_term_root_name"]; $qLangS = $dataDictionary["t_term_root_lang_s"]; $qLangT = $dataDictionary["t_term_root_lang_t"]; $arrTabRight[] = $objViewTermRoot->title($dataDictionary); } else { $result = RES_NG; $gResult->push("{$WORD($wk, 20, $kindText)}"); } break; // 用語抽出登録 -------------------- case MODE_EXTERM_NEW: $resDAOExterm = $objDAOExterm->get($qExtermID, DAO::T_EXTERM_STATE_PROVISIONAL); $result = $resDAOExterm["result"]; if ( $result === RES_OK ){ $qType = DAO::T_TERM_ROOT_TYPE_NORMAL; $qPublic = $objDAOTermRoot->getInit("t_term_root_public"); $qName = $objDAOTermRoot->getInit("t_term_root_name"); $qLangS = $resDAOExterm["data"][0]["t_exterm_lang_s"]; $qLangT = $resDAOExterm["data"][0]["t_exterm_lang_t"]; } else { $result = RES_NG; $gResult->push("{$WORD($wk, 21)}"); } break; } } } DAO::end($result); } //---------------------------- // menu //---------------------------- { if ( $isPost && $result !== RES_OK && $isPostRetry ){ $isPost = FALSE; $result = RES_OK; } // menu ---------------------------------------------------------------- if ( $result !== RES_NG ){ $arrMenu = array(); //----- $arrMenu[100] = $objViewTermRoot->tab($qKind, View_term_root::TAB_LIST, $auth, $qProjectID); switch ( $mode ){ case MODE_NEW: case MODE_COPY: case MODE_EXTERM_NEW: $arrMenu[0] = $objViewTermRoot->tab($qKind, View_term_root::TAB_NEW, $auth, $qProjectID); break; case MODE_EDIT: if ( $tab = $objViewTermRoot->tab($qKind, View_term_root::TAB_ITEM_EDIT, $auth, $qProjectID, $qID) ){ $arrMenu[1] = $tab; } else if ( $tab = $objViewTermRoot->tab($qKind, View_term_root::TAB_ITEM_LIST, $auth, $qProjectID, $qID) ){ $arrMenu[1] = $tab; } $arrMenu[0] = $objViewTermRoot->tab($qKind, View_term_root::TAB_EDIT, $auth, $qProjectID, $qID); $arrMenu[2] = $objViewTermRoot->tab($qKind, View_term_root::TAB_IMPORT, $auth, $qProjectID, $qID); break; } //----- $arrHtml["menu"] = Printer::menuTab($arrMenu, 0, $arrTabRight); } // title --------------------------------------------------------------- switch ( $mode ){ case MODE_NEW: case MODE_COPY: case MODE_EXTERM_NEW: $title = "{$WORD($wk, 22, $kindText)}"; break; case MODE_EDIT: $title = "{$WORD($wk, 23, $kindText)}"; break; } // form ---------------------------------------------------------------- if ( $result === RES_OK ){ if ( $isPost ){ $arrRequest = array( "q_kind" => $qKind, "q_id" => $qID, "q_project_id" => $qProjectID, ); if ( $mode === MODE_EXTERM_NEW ){ $arrRequest = array( "q_project_id" => $qProjectID, ); header("Location: /content/exterm?".http_build_query($arrRequest)); } else if ( $qImport === ON ){ header("Location: /content/term/import.html?".http_build_query($arrRequest)); } else { header("Location: /content/term/?".http_build_query($arrRequest)); } } else { $arrControl = array(); $arrAction = array(); // フォーム(タイプ) $arrControl[] = array( "id" => "q_type", "name" => "{$WORD($wk, 24)}", "form" => array( //Printer::radio("q_type", "q_type", DAO::T_TERM_ROOT_TYPE_TABLE(), $qType). Printer::radio(NULL, "q_type", array_slice(DAO::T_TERM_ROOT_TYPE_TABLE(), 0, 1, true), $qType, array("data-name-placeholder"=>$defaultName)). Printer::radio(NULL, "q_type", array_slice(DAO::T_TERM_ROOT_TYPE_TABLE(), 1, 1, true), $qType, array("data-name-placeholder"=>"{$WORD($wk, 25)}")) ), "validate" => array( "required" => TRUE, ), "required" => TRUE, ); // フォーム(名前) $arrControl[] = array( "id" => "q_name", "name" => "{$WORD($wk, 27)}", "form" => array( Printer::input("text", "q_name", "q_name", $qName), ), "validate" => array( "required_and_type" => TRUE, "remote" => array( // Ajax "type" => "post", "url" => "/app/checkNameController.php", "data" => array( "q_kind" => ($qKind === Term::KIND_TERM) ? APP_CHECK_NAME_CONTROLLER_KIND_TERM : APP_CHECK_NAME_CONTROLLER_KIND_BILINGUAL, "q_id" => $qID, // "q_name" は自動で入る ), ), ), "required" => TRUE, ); // フォーム(言語) if ( ! Validate::inKeyArray($qLangS, $arrLangS) ){ $arrLangS[$qLangS] = $G_LANG_TABLE[$qLangS]; } if ( ! Validate::inKeyArray($qLangT, $arrLangT) ){ $arrLangT[$qLangT] = $G_LANG_TABLE[$qLangT]; } $arrControl[] = array( "id" => "q_lang_s", "name" => "{$WORD($wk, 28)}", "form" => array( Printer::select("q_lang_s", "q_lang_s", $arrLangS, $qLangS), Printer::icon("icon-arrow-right"), Printer::select("q_lang_t", "q_lang_t", $arrLangT, $qLangT), ), ); // フォーム(公開状態) $arrControl[] = array( "id" => "q_public", "name" => "{$WORD($wk, 29)}", "form" => array( Printer::radio("q_public", "q_public", DAO::T_TERM_ROOT_PUBLIC_TABLE(), $qPublic), ), ); // フォーム(登録方法) if ( $authImport && $mode !== MODE_EXTERM_NEW ){ $arrRadioImport = array( OFF => "{$WORD($wk, 30, $kindSubText)}", ON => "{$WORD($wk, 31)}", ); $arrControl[] = array( "id" => "q_import", "name" => "{$WORD($wk, 32)}", "form" => array( Printer::radio("q_import", "q_import", $arrRadioImport, $qImport), ), ); } // フォーム(プロジェクトID) $arrControl[] = array( "id" => NULL, "name" => NULL, "form" => array( Printer::input("hidden", "q_project_id", "q_project_id", $qProjectID), ), ); // フォーム(ID) $arrControl[] = array( "id" => NULL, "name" => NULL, "form" => array( Printer::input("hidden", "q_id", "q_id", $qID), ), ); if ( $mode === MODE_COPY ){ // フォーム(copy_id) $arrControl[] = array( "id" => NULL, "name" => NULL, "form" => Printer::input("hidden", "q_copy_id", "q_copy_id", $qCopyID), ); } if ( $mode === MODE_EXTERM_NEW ){ // フォーム(copy_id) $arrControl[] = array( "id" => NULL, "name" => NULL, "form" => Printer::input("hidden", "q_exterm_id", "q_exterm_id", $qExtermID), ); } // フォーム(token) $arrControl[] = array( "id" => NULL, "name" => NULL, "form" => Printer::input("hidden", "q_token", "q_token", Util::token()), ); // アクション(OK) $arrAction[] = Printer::input("submit", NULL, NULL, "OK", "btn btn-primary"); // アクション(キャンセル) $arrAction[] = Printer::link("Cancel", "btn btn-default", NULL, NULL, "./?q_kind={$qKind}"); $arrHtml["form"] = Printer::form("form_term_root", "form_term_root", "./edit.html?q_kind={$qKind}", "post", $arrControl, $arrAction); } } else { // アクション(OK) if ( Validate::inKeyArray($qKind, Term::KIND_TABLE()) ){ $arrHtml["form"] = Printer::link("OK", "btn btn-default", NULL, NULL, "./?q_kind={$qKind}"); } else { $arrHtml["form"] = Printer::link("OK", "btn btn-default", NULL, NULL, "/content/project/"); } } // result -------------------------------------------------------------- $arrHtml["result"] = $gResult->string(TRUE, $result); } ?>