summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2018-08-23 03:23:31 +0900
committerGitHub <noreply@github.com>2018-08-23 03:23:31 +0900
commitfca7a9da94751e7f6a1205827dcd8067523f5703 (patch)
tree4976df1d0dd755021bb44e7943c595c13d1b10b9 /src
parentMerge pull request #2396 from Tosuke/fix-2354 (diff)
parentコントロールパネルから招待制のオンオフを切り替えら... (diff)
downloadmisskey-fca7a9da94751e7f6a1205827dcd8067523f5703.tar.gz
misskey-fca7a9da94751e7f6a1205827dcd8067523f5703.tar.bz2
misskey-fca7a9da94751e7f6a1205827dcd8067523f5703.zip
Merge pull request #2412 from syuilo/develop
update
Diffstat (limited to 'src')
-rw-r--r--src/client/app/boot.js14
-rw-r--r--src/client/app/desktop/views/components/ui.header.account.vue11
-rw-r--r--src/client/app/desktop/views/pages/admin/admin.dashboard.vue14
-rw-r--r--src/client/app/mobile/views/components/ui.nav.vue1
-rw-r--r--src/misc/i18n.ts8
-rw-r--r--src/server/api/endpoints/admin/update-meta.ts37
6 files changed, 74 insertions, 11 deletions
diff --git a/src/client/app/boot.js b/src/client/app/boot.js
index 952881f6cb..86d48faf1a 100644
--- a/src/client/app/boot.js
+++ b/src/client/app/boot.js
@@ -38,12 +38,18 @@
//#endregion
//#region Detect the user language
- let lang = navigator.language;
+ let lang = null;
- if (!LANGS.includes(lang)) lang = lang.split('-')[0];
+ if (LANGS.includes(navigator.language)) {
+ lang = navigator.language;
+ } else {
+ lang = LANGS.find(x => x.split('-')[0] == navigator.language);
- // The default language is English
- if (!LANGS.includes(lang)) lang = 'en';
+ if (lang == null) {
+ // Fallback
+ lang = 'en-US';
+ }
+ }
if (settings) {
if (settings.device.lang) lang = settings.device.lang;
diff --git a/src/client/app/desktop/views/components/ui.header.account.vue b/src/client/app/desktop/views/components/ui.header.account.vue
index 4e0fc1cf1a..5e26389d89 100644
--- a/src/client/app/desktop/views/components/ui.header.account.vue
+++ b/src/client/app/desktop/views/components/ui.header.account.vue
@@ -30,10 +30,8 @@
<li @click="settings">
<p>%fa:cog%<span>%i18n:@settings%</span>%fa:angle-right%</p>
</li>
- </ul>
- <ul>
- <li @click="signout">
- <p class="signout">%fa:power-off%<span>%i18n:@signout%</span></p>
+ <li v-if="$store.state.i.isAdmin">
+ <router-link to="/admin">%fa:terminal%<span>%i18n:@admin%</span>%fa:angle-right%</router-link>
</li>
</ul>
<ul>
@@ -41,6 +39,11 @@
<p><span>%i18n:@dark%</span><template v-if="$store.state.device.darkmode">%fa:moon%</template><template v-else>%fa:R moon%</template></p>
</li>
</ul>
+ <ul>
+ <li @click="signout">
+ <p class="signout">%fa:power-off%<span>%i18n:@signout%</span></p>
+ </li>
+ </ul>
</div>
</transition>
</div>
diff --git a/src/client/app/desktop/views/pages/admin/admin.dashboard.vue b/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
index 3567585cb8..e0d23331b8 100644
--- a/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
@@ -11,6 +11,10 @@
<x-cpu-memory :connection="connection"/>
</div>
<div>
+ <label>
+ <input type="checkbox" v-model="disableRegistration" @change="updateMeta">
+ <span>disableRegistration</span>
+ </label>
<button class="ui" @click="invite">%i18n:@invite%</button>
<p v-if="inviteCode">Code: <code>{{ inviteCode }}</code></p>
</div>
@@ -28,6 +32,7 @@ export default Vue.extend({
data() {
return {
stats: null,
+ disableRegistration: false,
inviteCode: null,
connection: null,
connectionId: null
@@ -37,6 +42,10 @@ export default Vue.extend({
this.connection = (this as any).os.streams.serverStatsStream.getConnection();
this.connectionId = (this as any).os.streams.serverStatsStream.use();
+ (this as any).os.getMeta().then(meta => {
+ this.disableRegistration = meta.disableRegistration;
+ });
+
(this as any).api('stats').then(stats => {
this.stats = stats;
});
@@ -49,6 +58,11 @@ export default Vue.extend({
(this as any).api('admin/invite').then(x => {
this.inviteCode = x.code;
});
+ },
+ updateMeta() {
+ (this as any).api('admin/update-meta', {
+ disableRegistration: this.disableRegistration
+ });
}
}
});
diff --git a/src/client/app/mobile/views/components/ui.nav.vue b/src/client/app/mobile/views/components/ui.nav.vue
index 74564a48bb..39ea513b76 100644
--- a/src/client/app/mobile/views/components/ui.nav.vue
+++ b/src/client/app/mobile/views/components/ui.nav.vue
@@ -30,6 +30,7 @@
<ul>
<li><a @click="search">%fa:search%%i18n:@search%%fa:angle-right%</a></li>
<li><router-link to="/i/settings" :data-active="$route.name == 'settings'">%fa:cog%%i18n:@settings%%fa:angle-right%</router-link></li>
+ <li v-if="$store.getters.isSignedIn && $store.state.i.isAdmin"><router-link to="/admin">%fa:terminal%<span>%i18n:@admin%</span>%fa:angle-right%</router-link></li>
<li @click="dark"><p><template v-if="$store.state.device.darkmode">%fa:moon%</template><template v-else>%fa:R moon%</template><span>%i18n:@darkmode%</span></p></li>
</ul>
</div>
diff --git a/src/misc/i18n.ts b/src/misc/i18n.ts
index a07af3e939..3dbfd7fe7b 100644
--- a/src/misc/i18n.ts
+++ b/src/misc/i18n.ts
@@ -27,10 +27,12 @@ export default class Replacer {
let text = texts;
if (path) {
+ path = path.replace('.ts', '');
+
if (text.hasOwnProperty(path)) {
text = text[path];
} else {
- if (this.lang === 'ja') console.warn(`path '${path}' not found`);
+ if (this.lang === 'ja-JP') console.warn(`path '${path}' not found`);
return key; // Fallback
}
}
@@ -46,10 +48,10 @@ export default class Replacer {
});
if (error) {
- if (this.lang === 'ja') console.warn(`key '${key}' not found in '${path}'`);
+ if (this.lang === 'ja-JP') console.warn(`key '${key}' not found in '${path}'`);
return key; // Fallback
} else if (typeof text !== 'string') {
- if (this.lang === 'ja') console.warn(`key '${key}' is not string in '${path}'`);
+ if (this.lang === 'ja-JP') console.warn(`key '${key}' is not string in '${path}'`);
return key; // Fallback
} else {
return text;
diff --git a/src/server/api/endpoints/admin/update-meta.ts b/src/server/api/endpoints/admin/update-meta.ts
new file mode 100644
index 0000000000..bfcab9d6a6
--- /dev/null
+++ b/src/server/api/endpoints/admin/update-meta.ts
@@ -0,0 +1,37 @@
+import $ from 'cafy';
+import Meta from '../../../../models/meta';
+import getParams from '../../get-params';
+
+export const meta = {
+ desc: {
+ ja: 'インスタンスの設定を更新します。'
+ },
+
+ requireCredential: true,
+ requireAdmin: true,
+
+ params: {
+ disableRegistration: $.bool.optional.nullable.note({
+ desc: {
+ ja: '招待制か否か'
+ }
+ }),
+ }
+};
+
+export default (params: any) => new Promise(async (res, rej) => {
+ const [ps, psErr] = getParams(meta, params);
+ if (psErr) return rej(psErr);
+
+ const set = {} as any;
+
+ if (ps.disableRegistration === true || ps.disableRegistration === false) {
+ set.disableRegistration = ps.disableRegistration;
+ }
+
+ await Meta.update({}, {
+ $set: set
+ }, { upsert: true });
+
+ res();
+});