diff --git a/CHANGELOG.md b/CHANGELOG.md index b0aac39..5ffb134 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,7 @@ v2.0 - Fix FLEXIAPI-332 Check if the first line was untouched and that the number of columns is exact on each lines - Fix FLEXIAPI-329 Use correct routes for accounts devices - Fix FLEXIAPI-330 Remove the ConfirmedRegistration email and related code +- Fix FLEXIAPI-324 Add an app setup wizard page v1.6 ---- diff --git a/flexiapi/app/Account.php b/flexiapi/app/Account.php index 062a934..80e3d8b 100644 --- a/flexiapi/app/Account.php +++ b/flexiapi/app/Account.php @@ -339,11 +339,6 @@ class Account extends Authenticatable return null; } - public function getProvisioningLinphoneUriAttribute(): string - { - return str_replace('https://', 'linphone-config:', route('provisioning.provision', ['provisioning_token' => $this->provisioning_token])); - } - public static function dtmfProtocolsRule() { return implode(',', array_keys(self::$dtmfProtocols)); diff --git a/flexiapi/app/Http/Controllers/Account/ProvisioningController.php b/flexiapi/app/Http/Controllers/Account/ProvisioningController.php index 52200b0..26878a5 100644 --- a/flexiapi/app/Http/Controllers/Account/ProvisioningController.php +++ b/flexiapi/app/Http/Controllers/Account/ProvisioningController.php @@ -40,6 +40,13 @@ class ProvisioningController extends Controller ]); } + public function wizard(Request $request, string $provisioningToken) + { + return view('provisioning.wizard', [ + 'token' => $provisioningToken + ]); + } + public function qrcode(Request $request, string $provisioningToken) { $account = Account::withoutGlobalScopes() diff --git a/flexiapi/lang/fr.json b/flexiapi/lang/fr.json index fe817a6..03c9399 100644 --- a/flexiapi/lang/fr.json +++ b/flexiapi/lang/fr.json @@ -11,40 +11,43 @@ "Activate All": "Tout activer", "Activate": "Activer", "Activated": "Activé", - "Activity": "Activité", "Activity expiration delay": "Délais d'expiration après activité", + "Activity": "Activité", "Add contact": "Ajout d'un contact", "Add contacts": "Ajouter des contacts", "Add existing contacts lists to display them in the user applications.": "Ajouter des listes de contacts existantes afin qu’elles soient visibles dans les applications de l’utilisateur.", "Add": "Ajouter", "Admin": "Administrateur", - "Admins": "Administrateurs", "Administration": "Administration", + "Admins": "Administrateurs", "All the admins will be super admins": "Tous les administrateurs seront super-administrateurs", "Allow a custom CSS theme": "Autoriser un thème CSS personnalisé", "Allow client settings to be overwritten by the provisioning ones": "Écraser la configuration client avec celle du déploiement", - "An email will be sent to :email with a unique link allowing the user to reset its password.": "Un email sera envoyé à :email avec un lien unique l'invitant à réinitialiser son mot de passe", "An email will be sent to :email with a QR Code and provisioning link.": "Un email sera envoyé à :email contenant un QR Code et un lien de déploiement.", + "An email will be sent to :email with a unique link allowing the user to reset its password.": "Un email sera envoyé à :email avec un lien unique l'invitant à réinitialiser son mot de passe", "An email will be sent to this email when someone join the newsletter": "Un email sera envoyé à cette addresse quand quelqu'un rejoint la liste de diffusion", + "Api Keys": "Clefs d'API", "App Configuration": "Configuration de l'App", "App settings": "Paramètres d'application", - "Api Keys": "Clefs d'API", "Assistant": "Assistant", "Blocked": "Bloqué", "Broadcast": "Broadcast", + "By email": "Inscription par email", + "By phone": "Par téléphone", "By": "Par", - "Calls logs": "Journaux d'appel", "Call Recording": "Enregistrement d'appels", + "Calls logs": "Journaux d'appel", "Cancel": "Annuler", "Cannot be changed once created.": "Ne peut être changé par la suite.", "Change your email": "Changer votre email", "Change your phone number": "Changer votre numéro de téléphone", - "Code Verification" : "Vérification du code", - "Instant Messaging": "Messagerie Instantanée", "Check the README.md documentation": "Voir la documentation dans README.md", "Clear to never expire": "Laisser vide pour ne jamais expirer", + "Code Verification" : "Vérification du code", "Code": "Code", "Configuration": "Configuration", + "Configure your Linphone application": "Configurer votre application Linphone", + "Configure": "Configurer", "Confirm email": "Confirmer l'email", "Confirm password": "Confirmer le mot de passe", "Confirmed registration text": "Texte de confirmation d'inscription", @@ -52,7 +55,6 @@ "Contacts List": "Liste de Contacts", "Contacts Lists": "Listes de Contacts", "Contacts": "Contacts", - "Configure": "Configurer", "Copyright text": "Texte droits d'auteurs", "Country code": "Code du pays", "Create": "Créer", @@ -69,10 +71,10 @@ "Dictionary": "Dictionnaire", "Display name": "Nom d'affichage", "Domain": "Domaine", + "Download the app": "Télécharger l'application", "Edit": "Éditer", - "By email": "Inscription par email", - "Email": "Email", "Email Server": "Serveur Mail", + "Email": "Email", "Empty": "Vide", "Enable the web interface": "Activer l'interface web", "Enabled": "Activé", @@ -80,13 +82,13 @@ "Enter the code you received below": "Saisissez le code reçu ci-dessous", "Errors": "Erreurs", "Expiration": "Expiration", + "Expired Space": "Espace expiré", "Expired": "Expiré", "Export": "Exporter", "External Account": "Compte Externe", - "Expired Space": "Espace expiré", "Features": "Fonctionnalités", - "Fill to change": "Remplir pour changer", "Fill the related columns if you want to add an external account as well": "Remplissez également les colonnes suivantes si vous souhaitez ajouter un compte externe", + "Fill to change": "Remplir pour changer", "From": "Depuis", "Host": "Hôte", "I accept the Privacy Policy": "J'accepte la Politique de Confidentialité", @@ -98,7 +100,9 @@ "In :days days": "Dans :days jours", "In ini format, will complete the other settings": "Au format ini, complètera les autres paramètres", "In lowercase letters": "En minuscules", + "Incorrect username or password": "Nom d'utilisateur ou mot de passe incorrect", "Information": "Informations", + "Instant Messaging": "Messagerie Instantanée", "Integration": "Intégration", "Intercom features": "Fonctionnalités d'interphonie", "It might actually disable this page, be careful": "Cette page pourrait être désactivée, faites attention", @@ -115,43 +119,40 @@ "My Account": "Mon Compte", "My Space": "Mon Espace", "Name": "Nom", - "Never": "Jamais", "Never expire": "N'expire jamais", + "Never": "Jamais", "New Admin": "Nouvel Admin", - "New user": "Nouvel utilisateur", "New Space": "Nouvel Espace", - "Newsletter registration email address": "Addresse email d'inscription à la liste de diffusion", + "New user": "Nouvel utilisateur", "Newsletter registration confirmed": "Confirmation de l'inscription à la newsletter", + "Newsletter registration email address": "Addresse email d'inscription à la liste de diffusion", "Next": "Suivant", "No account yet?": "Pas encore de compte ?", "No email yet": "Pas d'email pour le moment", "No limit": "Sans limite", "No phone yet": "Pas de téléphone pour le moment", "Number of minutes to expire the key after the last request.": "Nombre de minutes avant l'expiration de la clef après son dernier usage.", + "Open the app": "Ouvrir l'application", "Other information": "Autres informations", "Outbound proxy": "Outbound proxy", "Password": "Mot de passe", - "Your password" : "Votre mot de passe", "Phone Countries": "Numéros Internationaux", "Phone number": "Numéro de téléphone", - "By phone": "Par téléphone", "Phone registration": "Inscription par téléphone", "Please enter the new email that you would like to link to your account.": "Veuillez entre l'adresse email que vous souhaitez lier à votre compte.", "Please enter the new phone number that you would like to link to your account.": "Veuillez entrer le numéro de téléphone que vous souhaitez lier à votre compte.", "Protocol": "Protocole", + "Provisioning of your device": "Déploiement sur votre appareil", "Provisioning tokens": "Jetons de déploiement", "Provisioning": "Déploiement", - "Provisioning of your device": "Déploiement sur votre appareil", "Public registration": "Inscription publiques", "QR Code scanning": "Scan de QR Code", "Realm": "Royaume", "Recover your account using your email": "Récupérer votre compte avec votre email", - "Use the mobile app to recover your account using your phone number": "Utilisez l'application mobile pour récupérer votre compte avec votre numéro de téléphone", - "Username or Phone": "Nom d'utilisateur ou téléphone", "Register": "Inscription", "Registrar": "Registrar", - "Registration introduction": "Présentation lors de l'inscription", "Registration confirmed": "Confirmation de l'inscription", + "Registration introduction": "Présentation lors de l'inscription", "Remote provisioning": "configuration distante", "Remove": "Remove", "Renew": "Renouveller", @@ -163,8 +164,8 @@ "Reset": "Réinitialiser", "Role": "Rôle", "Scan the following QR Code using an authenticated device and wait a few seconds.": "Scanner le QR Code avec un appareil authentifié et attendez quelques secondes", - "Search": "Rechercher", "Search by username":"Rechercher par nom d'utilisateur", + "Search": "Rechercher", "Select a contacts list": "Sélectionner une liste de contact", "Select a domain": "Sélectionner un domaine", "Select a file": "Choisir un fichier", @@ -175,8 +176,8 @@ "Show usernames only": "Afficher uniquement les noms d'utilisateur", "Sip Adress": "Adresse SIP", "SIP Domain": "Domaine SIP", - "Space": "Espace", "Space is expiring in :days days": "Votre Espace expire dans %d jours", + "Space": "Espace", "Spaces": "Espaces", "Statistics": "Statistiques", "Subdomain": "Sous-domaine", @@ -187,7 +188,6 @@ "The account doesn't exists": "Le compte n'existe pas", "The code has expired": "Le code a expiré", "The code is not valid": "Le code n'est pas valide", - "We will send you a verification code to recover your account.": "Nous vous enverrons un code de vérification pour récupérer votre compte.", "The contact doesn't exists": "Le contact n'existe pas", "The file MUST be in CSV following this template": "Le fichier doit être au format CSV et respecter le modèle suivant", "The first line contains the labels": "La premières ligne contient les étiquettes", @@ -202,16 +202,18 @@ "Update": "Mettre à jour", "Updated on": "Mis à jour le", "Updated": "Mise à jour", + "Use the mobile app to recover your account using your phone number": "Utilisez l'application mobile pour récupérer votre compte avec votre numéro de téléphone", "Used on": "Utilisé le", "User": "Utilisateur", - "Users": "Utilisateurs", + "Username or Phone": "Nom d'utilisateur ou téléphone", "Username": "Nom d'utilisateur", + "Users": "Utilisateurs", "Value": "Valeur", "Verify": "Vérifier", "Via": "Via", + "We will send you a verification code to recover your account.": "Nous vous enverrons un code de vérification pour récupérer votre compte.", "Week": "Semaine", "Welcome on :app_name": "Bienvenue sur :app_name", - "Incorrect username or password": "Nom d'utilisateur ou mot de passe incorrect", "Year": "Année", "You already have an account?": "Vous avez déjà un compte ?", "You are going to permanently delete the following element. Please confirm your action.": "Vous allez supprimer l'élément suivant. Veuillez confirmer votre action.", @@ -219,5 +221,6 @@ "You can now continue your registration process in the application": "Vous pouvez maintenant continuer le processus d'inscription dans l'application", "You didn't receive the code?": "Vous n'avez pas reçu le code ?", "Your password was updated properly.": "Votre mot de passe a été mis à jour.", + "Your password" : "Votre mot de passe", "Your space has expired. Access to your interface is now disabled, and your users can no longer benefit from the service. To reactivate your space, please contact your account manager.": "Votre espace est arrivé à expiration. L’accès à votre interface est désormais désactivé, et vos utilisateurs ne peuvent plus bénéficier du service. Pour réactiver votre espace, veuillez contacter votre responsable de compte." } \ No newline at end of file diff --git a/flexiapi/public/css/style.css b/flexiapi/public/css/style.css index 0bd4193..a8ef9d0 100644 --- a/flexiapi/public/css/style.css +++ b/flexiapi/public/css/style.css @@ -76,6 +76,16 @@ body { --color-purple: rgba(151, 71, 255, 1); } +#wizard h3 { + margin-bottom: 3rem; +} + +#wizard .btn { + display: block; + text-align: center; + margin: 1rem 0; +} + body.show_menu { max-height: 100vh; overflow: hidden; diff --git a/flexiapi/resources/views/mails/parts/provisioning.blade.php b/flexiapi/resources/views/mails/parts/provisioning.blade.php index 0bf4d8e..cd84d61 100644 --- a/flexiapi/resources/views/mails/parts/provisioning.blade.php +++ b/flexiapi/resources/views/mails/parts/provisioning.blade.php @@ -1,6 +1,6 @@ To connect your account to the application, click on the following button: - + Connect my account diff --git a/flexiapi/resources/views/provisioning/wizard.blade.php b/flexiapi/resources/views/provisioning/wizard.blade.php new file mode 100644 index 0000000..f11ebe8 --- /dev/null +++ b/flexiapi/resources/views/provisioning/wizard.blade.php @@ -0,0 +1,14 @@ +@extends('layouts.main', ['welcome' => true]) + +@section('content') +
+

{{ __('Configure your Linphone application') }}

+ + + {{ __('Open the app') }} + + + {{ __('Download the app') }} + +
+@endsection diff --git a/flexiapi/routes/web.php b/flexiapi/routes/web.php index 5f9ac18..5a1caf1 100644 --- a/flexiapi/routes/web.php +++ b/flexiapi/routes/web.php @@ -52,6 +52,8 @@ Route::redirect('/', 'login')->name('account.home'); Route::get('about', 'AboutController@about')->name('about'); Route::middleware(['web_panel_enabled', 'space.check'])->group(function () { + Route::get('wizard/{provisioning_token}', 'Account\ProvisioningController@wizard')->name('provisioning.wizard'); + Route::get('login', 'Account\AuthenticateController@login')->name('account.login'); Route::post('authenticate', 'Account\AuthenticateController@authenticate')->name('account.authenticate'); Route::get('authenticate/qrcode/{token?}', 'Account\AuthenticateController@loginAuthToken')->name('account.authenticate.auth_token');