Skip to content

Commit

Permalink
Add informational message at login for visitors coming from upload bu…
Browse files Browse the repository at this point in the history
…tton

resolves #1880
  • Loading branch information
rigelk committed Jan 10, 2020
1 parent ab4d4db commit 000eb0e
Show file tree
Hide file tree
Showing 10 changed files with 83 additions and 9 deletions.
2 changes: 1 addition & 1 deletion client/src/app/header/header.component.html
Expand Up @@ -4,7 +4,7 @@
>
<span (click)="doSearch()" class="icon icon-search"></span>

<a class="upload-button" routerLink="/videos/upload">
<a class="upload-button" (click)="goToUpload()">
<my-global-icon iconName="upload"></my-global-icon>
<span i18n class="upload-button-label">Upload</span>
</a>
1 change: 1 addition & 0 deletions client/src/app/header/header.component.scss
Expand Up @@ -53,6 +53,7 @@
@include orange-button;
@include button-with-icon(22px, 3px, -1px);

color: var(--mainBackgroundColor) !important;
margin-right: 25px;

@media screen and (max-width: 800px) {
Expand Down
36 changes: 34 additions & 2 deletions client/src/app/header/header.component.ts
Expand Up @@ -2,8 +2,9 @@ import { filter, first, map, tap } from 'rxjs/operators'
import { Component, OnInit } from '@angular/core'
import { ActivatedRoute, NavigationEnd, Params, Router } from '@angular/router'
import { getParameterByName } from '../shared/misc/utils'
import { AuthService } from '@app/core'
import { AuthService, ServerService, Notifier } from '@app/core'
import { of } from 'rxjs'
import { ServerConfig } from '@shared/models'

@Component({
selector: 'my-header',
Expand All @@ -14,10 +15,15 @@ import { of } from 'rxjs'
export class HeaderComponent implements OnInit {
searchValue = ''

private serverConfig: ServerConfig

constructor (
private router: Router,
private route: ActivatedRoute,
private auth: AuthService
private auth: AuthService,
private serverService: ServerService,
private authService: AuthService,
private notifier: Notifier
) {}

ngOnInit () {
Expand All @@ -27,6 +33,13 @@ export class HeaderComponent implements OnInit {
map(() => getParameterByName('search', window.location.href))
)
.subscribe(searchQuery => this.searchValue = searchQuery || '')

this.serverConfig = this.serverService.getTmpConfig()
this.serverService.getConfig().subscribe(
config => this.serverConfig = config,

err => this.notifier.error(err.message)
)
}

doSearch () {
Expand All @@ -45,6 +58,25 @@ export class HeaderComponent implements OnInit {
o.subscribe(() => this.router.navigate([ '/search' ], { queryParams }))
}

isUserLoggedIn () {
return this.authService.isLoggedIn()
}

isRegistrationAllowed () {
return this.serverConfig.signup.allowed &&
this.serverConfig.signup.allowedForCurrentIP
}

goToUpload () {
if (this.isUserLoggedIn()) {
this.router.navigate([ '/videos/upload' ])
} else if (this.isRegistrationAllowed()) {
this.router.navigate([ '/signup' ])
} else {
this.router.navigate([ '/login', { fromUpload: true } ])
}
}

private loadUserLanguagesIfNeeded (queryParams: any) {
if (queryParams && queryParams.languageOneOf) return of(queryParams)

Expand Down
12 changes: 12 additions & 0 deletions client/src/app/login/login.component.html
Expand Up @@ -3,6 +3,18 @@
Login
</div>

<div class="alert alert-warning" *ngIf="from.upload" role="alert">
<h6 class="alert-heading" i18n>
If you are looking for an account…
</h6>
<div i18n>
Currently this instance doesn't allow for user registration, but you can find an instance
that gives you the possibility to sign up for an account and upload your videos there.
Find yours among multiple instances at <a class="alert-link" [href]="instancesIndexUrl" target="_blank" rel="noopener noreferrer">{{ instancesIndexUrl }}</a>
, a directory of instances recommended by this instance.
</div>
</div>

<div *ngIf="error" class="alert alert-danger">{{ error }}
<span *ngIf="error === 'User email is not verified.'"> <a i18n routerLink="/verify-account/ask-send-email">Request new verification email.</a></span>
</div>
Expand Down
4 changes: 3 additions & 1 deletion client/src/app/login/login.component.scss
Expand Up @@ -20,8 +20,10 @@ input[type=submit] {
.create-an-account, .forgot-password-button {
color: var(--mainForegroundColor);
cursor: pointer;
transition: opacity cubic-bezier(0.39, 0.575, 0.565, 1);

&:hover {
text-decoration: underline !important;
text-decoration: none !important;
opacity: .7 !important;
}
}
14 changes: 11 additions & 3 deletions client/src/app/login/login.component.ts
@@ -1,14 +1,14 @@
import { Component, ElementRef, OnInit, ViewChild } from '@angular/core'
import { Notifier, RedirectService, ServerService } from '@app/core'
import { Notifier, RedirectService } from '@app/core'
import { UserService } from '@app/shared'
import { AuthService } from '../core'
import { FormReactive } from '../shared'
import { I18n } from '@ngx-translate/i18n-polyfill'
import { FormValidatorService } from '@app/shared/forms/form-validators/form-validator.service'
import { LoginValidatorsService } from '@app/shared/forms/form-validators/login-validators.service'
import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'
import { ActivatedRoute, Router } from '@angular/router'
import { ServerConfig } from '@shared/models'
import { ActivatedRoute } from '@angular/router'
import { ServerConfig } from '@shared/models/server/server-config.model'

@Component({
selector: 'my-login',
Expand All @@ -22,6 +22,9 @@ export class LoginComponent extends FormReactive implements OnInit {

error: string = null
forgotPasswordEmail = ''
from = {
upload: false
}

private openedForgotPasswordModal: NgbModalRef
private serverConfig: ServerConfig
Expand All @@ -44,12 +47,17 @@ export class LoginComponent extends FormReactive implements OnInit {
return this.serverConfig.signup.allowed === true
}

get instancesIndexUrl () {
return this.serverConfig.followings.instance.autoFollowIndex.indexUrl || 'https://instances.joinpeertube.org'
}

isEmailDisabled () {
return this.serverConfig.email.enabled === false
}

ngOnInit () {
this.serverConfig = this.route.snapshot.data.serverConfig
this.from.upload = Boolean(this.route.snapshot.paramMap.get('fromUpload'))

this.buildForm({
username: this.loginValidatorsService.LOGIN_USERNAME,
Expand Down
1 change: 0 additions & 1 deletion client/src/app/menu/menu.component.ts
Expand Up @@ -33,7 +33,6 @@ export class MenuComponent implements OnInit {
private authService: AuthService,
private serverService: ServerService,
private redirectService: RedirectService,
private themeService: ThemeService,
private hotkeysService: HotkeysService
) {}

Expand Down
6 changes: 5 additions & 1 deletion client/src/sass/bootstrap.scss
Expand Up @@ -165,4 +165,8 @@ ngb-tabset.bootstrap {

.dropdown-divider {
margin: 0.3rem 0;
}
}

ngb-modal-backdrop {
z-index: 10000 !important;
}
8 changes: 8 additions & 0 deletions server/controllers/api/config.ts
Expand Up @@ -155,6 +155,14 @@ async function getConfig (req: express.Request, res: express.Response) {
},
tracker: {
enabled: CONFIG.TRACKER.ENABLED
},

followings: {
instance: {
autoFollowIndex: {
indexUrl: CONFIG.FOLLOWINGS.INSTANCE.AUTO_FOLLOW_INDEX.INDEX_URL
}
}
}
}

Expand Down
8 changes: 8 additions & 0 deletions shared/models/server/server-config.model.ts
Expand Up @@ -126,4 +126,12 @@ export interface ServerConfig {
tracker: {
enabled: boolean
}

followings: {
instance: {
autoFollowIndex: {
indexUrl: string
}
}
}
}

0 comments on commit 000eb0e

Please sign in to comment.