"", "page" => "", "table" => "", "form" => "", "header" => "", "footer" => "", ); //API $organizationId = ""; $qAPIName = ""; $qAPIKey = ""; $qAPISecret = ""; //---------------------------- // request parameter //---------------------------- //$qProjectID = isset($_SESSION["project_id"]) ? $_SESSION["project_id"] : REQ_NON; $qSearchText = isset($_REQUEST["q_text"]) ? $_REQUEST["q_text"] : REQ_NON; $qMode = isset($_REQUEST["q_mode"]) ? $_REQUEST["q_mode"] : REQ_NON; $qProjectID = isset($_REQUEST["q_project_id"]) ? $_REQUEST["q_project_id"] : REQ_NON; $qScore = isset($_REQUEST["q_score"]) ? $_REQUEST["q_score"] : REQ_NON; $qLimit = isset($_REQUEST["q_limit"]) ? $_REQUEST["q_limit"] : 100; $qOffset = isset($_REQUEST["q_offset"]) ? $_REQUEST["q_offset"] : REQ_NON; //---------------------------- // judge post //---------------------------- //---------------------------- // set types //---------------------------- Util::setType($qSearchText, "string"); Util::setType($qMode, "int"); Util::setType($qProjectID, "int"); Util::setType($qScore, "float"); //---------------------------- // Auth-Before validate //---------------------------- if ( $result === RES_OK ){ if ( ! Validate::isNumeric($qProjectID) ){ $result = RES_NG; $gResult->push("{$WORD($wk, 1)}"); } if ( ! Validate::inArray($qMode, $G_CONTENT_SEARCH_INDEX_MODE_TABLE) ){ $qMode = CONTENT_SEARCH_INDEX_MODE_BILINGUAL; // 初期は対訳検索 } if ( ! Validate::isNumeric($qScore) || $qScore <= 0 ){ $qScore = 0.7; } } //---------------------------- // Auth //---------------------------- if ( $result === RES_OK ){ $auth = Auth::instance("project"); // 権限 $authCheck = FALSE; switch ( $qMode ){ case CONTENT_SEARCH_INDEX_MODE_DOCUMENT: $authCheck = $auth->processDSearch($qProjectID); break; case CONTENT_SEARCH_INDEX_MODE_BILINGUAL: $authCheck = $auth->processBSearch($qProjectID); break; case CONTENT_SEARCH_INDEX_MODE_SIM: $authCheck = $auth->processSimilarity($qProjectID); break; } if ( ! $authCheck ){ $result = RES_NG; $gResult->push("{$WORD($wk, 2)}"); } } //---------------------------- // Auth-After validate //---------------------------- if ( $result === RES_OK ){ } //---------------------------- // function //---------------------------- //---------------------------- // process //---------------------------- if ( $result === RES_OK ){ $objDAOProject = DAO::instance("project"); $objDAODocument = DAO::instance("document"); $objDAODocumentText = DAO::instance("document_text"); $objDAOBilingualRoot = DAO::instance("term_root", Term::KIND_BILINGUAL); $objDAOBilingual = DAO::instance("term", Term::KIND_BILINGUAL); $objDAOOrganization = DAO::instance("organization"); $objViewSearch = View::instance("search"); $qSearchText = trim($qSearchText); if ( $result === RES_OK ){ $objDAOProject->setAuth( $auth ); $resDAOProject = $objDAOProject->get($qProjectID); $result = $resDAOProject["result"]; if ( $result === RES_OK ){ $hProject = Printer::icon("icon-th", NULL, $resDAOProject["data"][0]["t_project_name"]); } else { $result = RES_NG; $gResult->push("{$WORD($wk, 3)}"); } } if ( $result === RES_OK ){ switch ( $qMode ){ //------------------------------ // 文書検索 //------------------------------ case CONTENT_SEARCH_INDEX_MODE_DOCUMENT: if ( $result === RES_OK ){ $resDAODocument = $objDAODocument->get(NULL, array_keys(DAO::T_DOCUMENT_STATE_VALID_TABLE()), NULL, $qProjectID); $result = $resDAODocument["result"]; if ( $result === RES_OK ){ $arrDocument = array(); foreach ( $resDAODocument["data"] as $dataDocument ){ $arrDocument[$dataDocument["t_document_id"]] = $dataDocument["t_document_title"]; } } else if ( $result === RES_NO_DATA ){ } else { $result = RES_NG; $gResult->push("{$WORD($wk, 4)}"); } } if ( $result === RES_OK ){ $resDAODocumentText = $objDAODocumentText->getTextSearch( array_keys($arrDocument), $qSearchText, $qLimit, $qOffset ); $result = $resDAODocumentText["result"]; if ( $result === RES_OK ){ // ページネーション $arrHtml["table"] = $objViewSearch->tableDSearch( $resDAODocumentText["data"], $qProjectID); $arrHtml["header"] = Printer::paginationTableHeader(TRUE, ".", $_REQUEST, $resDAODocumentText["count"], $qLimit, $qOffset, 10); $arrHtml["footer"] = Printer::paginationTableFooter(TRUE, ".", $_REQUEST, $resDAODocumentText["count"], $qLimit, $qOffset, 10); } } break; //------------------------------ // 翻訳メモリ検索 //------------------------------ case CONTENT_SEARCH_INDEX_MODE_BILINGUAL: if ( $result === RES_OK ){ $resDAOBilingualRoot = $objDAOBilingualRoot->get(NULL, DAO::T_TERM_ROOT_STATE_NORMAL, NULL, NULL, $qProjectID, TRUE); $result = $resDAOBilingualRoot["result"]; if ($result === RES_OK ){ $arrBilingual = array(); foreach ( $resDAOBilingualRoot["data"] as $dataBilingualRoot ){ $arrBilingual[$dataBilingualRoot["t_term_root_id"]] = $dataBilingualRoot["t_term_root_name"]; } } else if ( $result === RES_NO_DATA ){ // } else { $result = RES_NG; $gResult->push("{$WORD($wk, 5)}"); } } if ( $result === RES_OK ){ $resDAOBilingual = $objDAOBilingual->getTextSearch( array_keys($arrBilingual), $qSearchText, $qLimit, $qOffset ); $result = $resDAOBilingual["result"]; if ( $result === RES_OK ){ // ページネーション $arrHtml["table"] = $objViewSearch->tableBSearch( $resDAOBilingual["data"], $qProjectID); $arrHtml["header"] = Printer::paginationTableHeader(TRUE, ".", $_REQUEST, $resDAOBilingual["count"], $qLimit, $qOffset, 10); $arrHtml["footer"] = Printer::paginationTableFooter(TRUE, ".", $_REQUEST, $resDAOBilingual["count"], $qLimit, $qOffset, 10); } } break; //------------------------------ // 類似文検索 //------------------------------ case CONTENT_SEARCH_INDEX_MODE_SIM: if ( $result === RES_OK ){ //////////////////////// // WebAPI接続情報取得 // //////////////////////// $organizationId = User::get("organization_id"); // 組織情報テーブルよりWebAPI接続情報を取得 $resDAOOrganizationApiInfo = $objDAOOrganization->getApiInfo($organizationId); if ( $resDAOOrganizationApiInfo["result"] === RES_OK ){ $dataApiInfo = $resDAOOrganizationApiInfo["data"][0]; $qAPIName = $dataApiInfo["t_mtauto_name"]; $qAPIKey = $dataApiInfo["t_mtauto_key"]; $qAPISecret = $dataApiInfo["t_mtauto_secret"]; } // 取得した接続情報が不正の場合 if (($qAPIName === "")||($qAPIKey === "")||($qAPISecret === "")){ $result = RES_NG; $gResult->push("{$WORD($wk, 6)}"); } } if ( $result === RES_OK ){ $objToolSimilarityWebAPI = new ToolSimilarityWebAPI($qAPIName, $qAPIKey, $qAPISecret); //////////////////////////// // 対訳集一覧取得(WebAPI) // //////////////////////////// $resBilinguaList = $objToolSimilarityWebAPI->getListBilingual( "", "", ToolSimilarityWebAPI::LIMIT_LISTBILINGUAL, ToolSimilarityWebAPI::OFFSET_LISTBILINGUAL ); $arrBilingual = array(); if ($resBilinguaList){ foreach ( $resBilinguaList as $dataBilingualList ){ $arrBilingual[$dataBilingualList['id']] = $dataBilingualList['name']; } } //////////////////////// // 類似文検索(WebAPI) // //////////////////////// $resToolSimilarity = $objToolSimilarityWebAPI->run($qSearchText, $qScore, array_keys($arrBilingual), ToolSimilarityWebAPI::LIMIT_RUN); if ( ! is_array($resToolSimilarity) ){ $result = RES_NG; $gResult->push("{$WORD($wk, 7)}"); } else if ( count($resToolSimilarity) === 0 ){ $result = RES_NO_DATA; } else { // ページネーション $arrHtml["table"] = $objViewSearch->tableSimSearch( $resToolSimilarity ); $arrHtml["header"] = Printer::paginationTableHeader(TRUE, ".", $_REQUEST, count($resToolSimilarity), $qLimit, $qOffset, 10); $arrHtml["footer"] = Printer::paginationTableFooter(TRUE, ".", $_REQUEST, count($resToolSimilarity), $qLimit, $qOffset, 10); } } if ( $result !== RES_NG ){ $arrSearchOption[] = $objViewSearch->formSearchOptionSimilarity( $qScore ); } break; } if ( $result !== RES_NG ){ $arrHiddenCtrl[] = Printer::input("hidden", "q_project_id", "q_project_id", $qProjectID); $arrHiddenCtrl[] = Printer::input("hidden", "q_mode", "q_mode", $qMode); } if ( $result === RES_NO_DATA ){ // ヒット無し $gResult->push("{$WORD($wk, 8)}"); } else if ( $result === RES_NG ){ $gResult->push("{$WORD($wk, 9)}"); } } } //---------------------------- // menu //---------------------------- { $arrMode = array( CONTENT_SEARCH_INDEX_MODE_DOCUMENT => "{$WORD($wk, 10)}", CONTENT_SEARCH_INDEX_MODE_BILINGUAL => "{$WORD($wk, 11)}", CONTENT_SEARCH_INDEX_MODE_SIM => "{$WORD($wk, 12)}", ); // title --------------------------------------------------------------- if ( array_key_exists($qMode, $arrMode) ){ $hTitle = $arrMode[$qMode]; } else { $hTitle = "---"; } $arrRequest = array( "q_project_id" => $qProjectID, "q_text" => $qSearchText, ); $hMenuDropdown = ""; foreach ( $arrMode as $mode => $modeText ){ $arrRequest["q_mode"] = $mode; $hMenuDropdown .= "