diff --git a/packages/hydrooj/src/handler/problem.ts b/packages/hydrooj/src/handler/problem.ts index a79b54909..3a550cd98 100644 --- a/packages/hydrooj/src/handler/problem.ts +++ b/packages/hydrooj/src/handler/problem.ts @@ -507,7 +507,7 @@ export class ProblemSubmitHandler extends ProblemDetailHandler { if (typeof config === 'string' || config === null) throw new ProblemConfigError(); if (config.type === 'objective') { lang = '_'; - } else if (config.langs && !config.langs.includes(lang)) { + } else if ((config.langs && !config.langs.includes(lang)) || setting.langs[lang].disabled) { throw new ProblemNotAllowLanguageError(); } if (pretest) { diff --git a/packages/ui-default/utils/index.ts b/packages/ui-default/utils/index.ts index 4a9b997fc..0b28effae 100644 --- a/packages/ui-default/utils/index.ts +++ b/packages/ui-default/utils/index.ts @@ -33,7 +33,8 @@ export function getAvailableLangs(langsList?: string[]) { for (const key in window.LANGS) { if (prefixes.has(key)) continue; if (langsList && langsList.length && langsList.join('') && !langsList.includes(key)) continue; - else if (window.LANGS[key].hidden && !langsList?.includes(key)) continue; + if (window.LANGS[key].hidden && !langsList?.includes(key)) continue; + if (window.LANGS[key].disabled) continue; Langs[key] = window.LANGS[key]; } return Langs; diff --git a/packages/utils/lib/lang.ts b/packages/utils/lib/lang.ts index 22bfeb858..035a5c76c 100644 --- a/packages/utils/lib/lang.ts +++ b/packages/utils/lib/lang.ts @@ -1,6 +1,7 @@ import yaml from 'js-yaml'; export interface LangConfig { + disabled?: boolean; compile?: string; execute: string; code_file: string; @@ -41,6 +42,7 @@ export function parseLang(config: string): Record { entry.execute ||= '/w/foo'; entry.key = key; entry.hidden ||= false; + entry.disabled ||= false; } return file; }