diff options
-rw-r--r-- | client/src/app/app.component.ts | 22 | ||||
-rw-r--r-- | client/src/app/modal/instance-config-warning-modal.component.html | 29 | ||||
-rw-r--r-- | client/src/app/modal/instance-config-warning-modal.component.scss | 14 | ||||
-rw-r--r-- | client/src/app/modal/instance-config-warning-modal.component.ts | 29 | ||||
-rw-r--r-- | client/src/app/modal/welcome-modal.component.html | 26 | ||||
-rw-r--r-- | client/src/app/modal/welcome-modal.component.scss | 4 | ||||
-rw-r--r-- | client/src/app/modal/welcome-modal.component.ts | 2 | ||||
-rw-r--r-- | server/controllers/api/users/me.ts | 12 |
8 files changed, 99 insertions, 39 deletions
diff --git a/client/src/app/app.component.ts b/client/src/app/app.component.ts index f68641047..6b18e5feb 100644 --- a/client/src/app/app.component.ts +++ b/client/src/app/app.component.ts | |||
@@ -244,15 +244,19 @@ export class AppComponent implements OnInit { | |||
244 | if (user.noWelcomeModal !== true) return this.welcomeModal.show() | 244 | if (user.noWelcomeModal !== true) return this.welcomeModal.show() |
245 | 245 | ||
246 | const config = this.serverService.getConfig() | 246 | const config = this.serverService.getConfig() |
247 | 247 | if (user.noInstanceConfigWarningModal === true || !config.signup.allowed) return | |
248 | if (user.noInstanceConfigWarningModal !== true && config.signup.allowed && config.instance.name.toLowerCase() === 'peertube') { | 248 | |
249 | this.instanceService.getAbout() | 249 | this.instanceService.getAbout() |
250 | .subscribe(about => { | 250 | .subscribe(about => { |
251 | if (!about.instance.terms) { | 251 | if ( |
252 | this.instanceConfigWarningModal.show() | 252 | config.instance.name.toLowerCase() === 'peertube' || |
253 | } | 253 | !about.instance.terms || |
254 | }) | 254 | !about.instance.administrator || |
255 | } | 255 | !about.instance.maintenanceLifetime |
256 | ) { | ||
257 | this.instanceConfigWarningModal.show(about) | ||
258 | } | ||
259 | }) | ||
256 | } | 260 | } |
257 | 261 | ||
258 | private initHotkeys () { | 262 | private initHotkeys () { |
diff --git a/client/src/app/modal/instance-config-warning-modal.component.html b/client/src/app/modal/instance-config-warning-modal.component.html index 595afb103..f9e07333a 100644 --- a/client/src/app/modal/instance-config-warning-modal.component.html +++ b/client/src/app/modal/instance-config-warning-modal.component.html | |||
@@ -1,14 +1,41 @@ | |||
1 | <ng-template #modal let-hide="close"> | 1 | <ng-template #modal let-hide="close"> |
2 | <div class="modal-header"> | 2 | <div class="modal-header"> |
3 | <h4 i18n class="modal-title">Warning!</h4> | 3 | <h4 i18n class="modal-title">Configuration warning!</h4> |
4 | <my-global-icon iconName="cross" aria-label="Close" role="button" (click)="hide()"></my-global-icon> | 4 | <my-global-icon iconName="cross" aria-label="Close" role="button" (click)="hide()"></my-global-icon> |
5 | </div> | 5 | </div> |
6 | 6 | ||
7 | <div class="modal-body"> | 7 | <div class="modal-body"> |
8 | 8 | ||
9 | <p i18n>Hello dear administrator. You enabled user registration on your instance but you did not configure the following fields:</p> | ||
10 | |||
11 | <ul> | ||
12 | <li i18n *ngIf="about.instance.name.toLowerCase() === 'peertube'">Instance name</li> | ||
13 | <li i18n *ngIf="about.instance.shortDescription">Instance short description</li> | ||
14 | |||
15 | <li i18n *ngIf="!about.instance.administrator">Who you are</li> | ||
16 | <li i18n *ngIf="!about.instance.maintenanceLifetime">How long you plan to maintain your instance</li> | ||
17 | <li i18n *ngIf="!about.instance.businessModel">How you plan to pay your instance</li> | ||
18 | |||
19 | <li i18n *ngIf="!about.instance.moderationInformation">How you will moderate your instance</li> | ||
20 | <li i18n *ngIf="!about.instance.terms">Instance terms</li> | ||
21 | </ul> | ||
22 | |||
23 | <p>Please consider to configure these fields to help people to choose <strong>the appropriate instance</strong>.</p> | ||
24 | |||
25 | <div class="configure-instance"> | ||
26 | <a i18n href="/admin/config/edit-custom" target="_blank" rel="noopener noreferrer">Configure these fields</a> | ||
27 | </div> | ||
28 | |||
9 | </div> | 29 | </div> |
10 | 30 | ||
11 | <div class="modal-footer inputs"> | 31 | <div class="modal-footer inputs"> |
32 | <my-peertube-checkbox | ||
33 | inputName="stopDisplayModal" [(ngModel)]="stopDisplayModal" | ||
34 | i18n-labelText labelText="Don't show me this warning anymore" | ||
35 | > | ||
36 | |||
37 | </my-peertube-checkbox> | ||
38 | |||
12 | <span i18n class="action-button action-button-cancel" (click)="hide()">Close</span> | 39 | <span i18n class="action-button action-button-cancel" (click)="hide()">Close</span> |
13 | </div> | 40 | </div> |
14 | 41 | ||
diff --git a/client/src/app/modal/instance-config-warning-modal.component.scss b/client/src/app/modal/instance-config-warning-modal.component.scss index 51834c649..5888736c1 100644 --- a/client/src/app/modal/instance-config-warning-modal.component.scss +++ b/client/src/app/modal/instance-config-warning-modal.component.scss | |||
@@ -4,3 +4,17 @@ | |||
4 | .action-button-cancel { | 4 | .action-button-cancel { |
5 | margin-right: 0 !important; | 5 | margin-right: 0 !important; |
6 | } | 6 | } |
7 | |||
8 | .modal-body { | ||
9 | font-size: 15px; | ||
10 | } | ||
11 | |||
12 | li { | ||
13 | margin-bottom: 10px; | ||
14 | } | ||
15 | |||
16 | .configure-instance { | ||
17 | text-align: center; | ||
18 | font-weight: 600; | ||
19 | font-size: 18px; | ||
20 | } | ||
diff --git a/client/src/app/modal/instance-config-warning-modal.component.ts b/client/src/app/modal/instance-config-warning-modal.component.ts index 5cc9207cd..08d83f383 100644 --- a/client/src/app/modal/instance-config-warning-modal.component.ts +++ b/client/src/app/modal/instance-config-warning-modal.component.ts | |||
@@ -1,7 +1,8 @@ | |||
1 | import { Component, ElementRef, ViewChild } from '@angular/core' | 1 | import { Component, ElementRef, ViewChild } from '@angular/core' |
2 | import { Notifier } from '@app/core' | 2 | import { Notifier } from '@app/core' |
3 | import { I18n } from '@ngx-translate/i18n-polyfill' | ||
4 | import { NgbModal } from '@ng-bootstrap/ng-bootstrap' | 3 | import { NgbModal } from '@ng-bootstrap/ng-bootstrap' |
4 | import { About } from '@shared/models/server' | ||
5 | import { UserService } from '@app/shared' | ||
5 | 6 | ||
6 | @Component({ | 7 | @Component({ |
7 | selector: 'my-instance-config-warning-modal', | 8 | selector: 'my-instance-config-warning-modal', |
@@ -11,13 +12,31 @@ import { NgbModal } from '@ng-bootstrap/ng-bootstrap' | |||
11 | export class InstanceConfigWarningModalComponent { | 12 | export class InstanceConfigWarningModalComponent { |
12 | @ViewChild('modal', { static: true }) modal: ElementRef | 13 | @ViewChild('modal', { static: true }) modal: ElementRef |
13 | 14 | ||
15 | stopDisplayModal = false | ||
16 | about: About | ||
17 | |||
14 | constructor ( | 18 | constructor ( |
19 | private userService: UserService, | ||
15 | private modalService: NgbModal, | 20 | private modalService: NgbModal, |
16 | private notifier: Notifier, | 21 | private notifier: Notifier |
17 | private i18n: I18n | ||
18 | ) { } | 22 | ) { } |
19 | 23 | ||
20 | show () { | 24 | show (about: About) { |
21 | this.modalService.open(this.modal) | 25 | this.about = about |
26 | |||
27 | const ref = this.modalService.open(this.modal) | ||
28 | |||
29 | ref.result.finally(() => { | ||
30 | if (this.stopDisplayModal === true) this.doNotOpenAgain() | ||
31 | }) | ||
32 | } | ||
33 | |||
34 | private doNotOpenAgain () { | ||
35 | this.userService.updateMyProfile({ noInstanceConfigWarningModal: true }) | ||
36 | .subscribe( | ||
37 | () => console.log('We will not open the instance config warning modal again.'), | ||
38 | |||
39 | err => this.notifier.error(err.message) | ||
40 | ) | ||
22 | } | 41 | } |
23 | } | 42 | } |
diff --git a/client/src/app/modal/welcome-modal.component.html b/client/src/app/modal/welcome-modal.component.html index c83b53c2c..79e6d4667 100644 --- a/client/src/app/modal/welcome-modal.component.html +++ b/client/src/app/modal/welcome-modal.component.html | |||
@@ -7,24 +7,24 @@ | |||
7 | <div class="modal-body"> | 7 | <div class="modal-body"> |
8 | 8 | ||
9 | <div class="block-links"> | 9 | <div class="block-links"> |
10 | <div class="subtitle">Useful links</div> | 10 | <div i18n class="subtitle">Useful links</div> |
11 | 11 | ||
12 | <ul> | 12 | <ul> |
13 | <li> | 13 | <li i18n> |
14 | Official PeerTube website: <a href="https://joinpeertube.org" target="_blank" rel="noopener noreferrer">https://joinpeertube.org</a> | 14 | Official PeerTube website: <a href="https://joinpeertube.org" target="_blank" rel="noopener noreferrer">https://joinpeertube.org</a> |
15 | </li> | 15 | </li> |
16 | 16 | ||
17 | <li> | 17 | <li i18n> |
18 | Discover CLI PeerTube tools (to upload or import videos, parse logs, prune storage directories, reset user password...): | 18 | Discover CLI PeerTube tools (to upload or import videos, parse logs, prune storage directories, reset user password...): |
19 | <a href="https://docs.joinpeertube.org/#/maintain-tools" target="_blank" rel="noopener noreferrer">https://docs.joinpeertube.org/#/maintain-tools</a> | 19 | <a href="https://docs.joinpeertube.org/#/maintain-tools" target="_blank" rel="noopener noreferrer">https://docs.joinpeertube.org/#/maintain-tools</a> |
20 | </li> | 20 | </li> |
21 | 21 | ||
22 | <li> | 22 | <li i18n> |
23 | Understand how to administer your instance (managing users, following other instances, dealing with spammers...): | 23 | Understand how to administer your instance (managing users, following other instances, dealing with spammers...): |
24 | <a href="https://docs.joinpeertube.org/#/admin-following-instances" target="_blank" rel="noopener noreferrer">https://docs.joinpeertube.org/#/admin-following-instances</a> | 24 | <a href="https://docs.joinpeertube.org/#/admin-following-instances" target="_blank" rel="noopener noreferrer">https://docs.joinpeertube.org/#/admin-following-instances</a> |
25 | </li> | 25 | </li> |
26 | 26 | ||
27 | <li> | 27 | <li i18n> |
28 | Learn how to use PeerTube (setup your account, managing video playlists, discover third-party applications...): | 28 | Learn how to use PeerTube (setup your account, managing video playlists, discover third-party applications...): |
29 | <a href="https://docs.joinpeertube.org/#/use-setup-account" target="_blank" rel="noopener noreferrer">https://docs.joinpeertube.org/#/use-setup-account</a> | 29 | <a href="https://docs.joinpeertube.org/#/use-setup-account" target="_blank" rel="noopener noreferrer">https://docs.joinpeertube.org/#/use-setup-account</a> |
30 | </li> | 30 | </li> |
@@ -32,30 +32,32 @@ | |||
32 | </div> | 32 | </div> |
33 | 33 | ||
34 | <div class="block-configuration"> | 34 | <div class="block-configuration"> |
35 | <div class="subtitle">Configure your instance</div> | 35 | <div i18n class="subtitle">Configure your instance</div> |
36 | 36 | ||
37 | <p> | 37 | <p i18n> |
38 | Now it's time to configure your instance! Choosing your <strong>instance name</strong>, <strong>setting up a description</strong>, | 38 | Now it's time to configure your instance! Choosing your <strong>instance name</strong>, <strong>setting up a description</strong>, |
39 | specifying <strong>who you are</strong> and <strong>how long</strong> you plan to <strong>maintain your instance</strong> | 39 | specifying <strong>who you are</strong> and <strong>how long</strong> you plan to <strong>maintain your instance</strong> |
40 | is very important for visitors to understand on what type of instance they are. | 40 | is very important for visitors to understand on what type of instance they are. |
41 | </p> | 41 | </p> |
42 | 42 | ||
43 | <p> | 43 | <p i18n> |
44 | If you want to open registrations, please decide what are <strong>your moderation rules</strong>, fill your <strong>instance terms</strong> | 44 | If you want to open registrations, please decide what are <strong>your moderation rules</strong>, fill your <strong>instance terms</strong> |
45 | and specify the categories and languages you speak. This way, users that are looking for a PeerTube instance on which they can register | 45 | and specify the categories and languages you speak. This way, users that are looking for a PeerTube instance on which they can register |
46 | will be able to choose <strong>the right one</strong>. | 46 | will be able to choose <strong>the right one</strong>. |
47 | </p> | 47 | </p> |
48 | 48 | ||
49 | <div class="configure-instance"> | 49 | <div class="configure-instance"> |
50 | <a href="/admin/config/edit-custom" target="_blank" rel="noopener noreferrer">Configure your instance</a> | 50 | <a i18n href="/admin/config/edit-custom" target="_blank" rel="noopener noreferrer">Configure your instance</a> |
51 | </div> | 51 | </div> |
52 | </div> | 52 | </div> |
53 | 53 | ||
54 | <div class="block-instance"> | 54 | <div class="block-instance"> |
55 | <div class="subtitle">Index your instance</div> | 55 | <div i18n class="subtitle">Index your instance</div> |
56 | 56 | ||
57 | If you want, you can index your PeerTube instance on the public PeerTube instances list: | 57 | <ng-container i18n> |
58 | <a href="https://instances.joinpeertube.org/instances">https://instances.joinpeertube.org/instances</a> | 58 | If you want, you can index your PeerTube instance on the public PeerTube instances list: |
59 | <a href="https://instances.joinpeertube.org/instances">https://instances.joinpeertube.org/instances</a> | ||
60 | </ng-container> | ||
59 | </div> | 61 | </div> |
60 | </div> | 62 | </div> |
61 | 63 | ||
diff --git a/client/src/app/modal/welcome-modal.component.scss b/client/src/app/modal/welcome-modal.component.scss index ab57bb993..a59c5b7a9 100644 --- a/client/src/app/modal/welcome-modal.component.scss +++ b/client/src/app/modal/welcome-modal.component.scss | |||
@@ -5,10 +5,6 @@ | |||
5 | font-size: 15px; | 5 | font-size: 15px; |
6 | } | 6 | } |
7 | 7 | ||
8 | .action-button-cancel { | ||
9 | margin-right: 0 !important; | ||
10 | } | ||
11 | |||
12 | .subtitle { | 8 | .subtitle { |
13 | font-weight: $font-semibold; | 9 | font-weight: $font-semibold; |
14 | margin-bottom: 10px; | 10 | margin-bottom: 10px; |
diff --git a/client/src/app/modal/welcome-modal.component.ts b/client/src/app/modal/welcome-modal.component.ts index bff2968d4..05412a4cd 100644 --- a/client/src/app/modal/welcome-modal.component.ts +++ b/client/src/app/modal/welcome-modal.component.ts | |||
@@ -34,7 +34,5 @@ export class WelcomeModalComponent { | |||
34 | 34 | ||
35 | err => this.notifier.error(err.message) | 35 | err => this.notifier.error(err.message) |
36 | ) | 36 | ) |
37 | |||
38 | return true | ||
39 | } | 37 | } |
40 | } | 38 | } |
diff --git a/server/controllers/api/users/me.ts b/server/controllers/api/users/me.ts index fb1ddbc6d..bf872ca52 100644 --- a/server/controllers/api/users/me.ts +++ b/server/controllers/api/users/me.ts | |||
@@ -190,19 +190,19 @@ async function updateMe (req: express.Request, res: express.Response) { | |||
190 | } | 190 | } |
191 | } | 191 | } |
192 | 192 | ||
193 | if (body.displayName !== undefined || body.description !== undefined) { | 193 | await sequelizeTypescript.transaction(async t => { |
194 | await sequelizeTypescript.transaction(async t => { | 194 | await user.save({ transaction: t }) |
195 | const userAccount = await AccountModel.load(user.Account.id, t) | ||
196 | 195 | ||
197 | await user.save({ transaction: t }) | 196 | if (body.displayName !== undefined || body.description !== undefined) { |
197 | const userAccount = await AccountModel.load(user.Account.id, t) | ||
198 | 198 | ||
199 | if (body.displayName !== undefined) userAccount.name = body.displayName | 199 | if (body.displayName !== undefined) userAccount.name = body.displayName |
200 | if (body.description !== undefined) userAccount.description = body.description | 200 | if (body.description !== undefined) userAccount.description = body.description |
201 | await userAccount.save({ transaction: t }) | 201 | await userAccount.save({ transaction: t }) |
202 | 202 | ||
203 | await sendUpdateActor(userAccount, t) | 203 | await sendUpdateActor(userAccount, t) |
204 | }) | 204 | } |
205 | } | 205 | }) |
206 | 206 | ||
207 | if (sendVerificationEmail === true) { | 207 | if (sendVerificationEmail === true) { |
208 | await sendVerifyUserEmail(user, true) | 208 | await sendVerifyUserEmail(user, true) |