Fix FLEXIAPI-447 (and related issues)

This commit is contained in:
Timothée Jaussoin 2026-03-10 17:26:10 +01:00
parent 7dd9cdfb42
commit 40dc384fb4
7 changed files with 144 additions and 32 deletions

View file

@ -14,6 +14,9 @@
"Activated": "Activé",
"Activity expiration delay": "Délais d'expiration après activité",
"Activity": "Activité",
"Activate call forwarding for all calls?": "Activer la redirection d'appel pour tous les appels?",
"Activate conditional call forwarding?": "Activer la redirection d'appel conditionelle?",
"Activating conditional call forwarding will automatically disable the Forward All Calls rule.": "L'activation de la redirection d'appel conditionnelle va désactiver la redirection d'appel pour tous les appels.",
"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 quelles soient visibles dans les applications de lutilisateur.",
@ -37,6 +40,7 @@
"Best regards,":"Cordialement,",
"Blocked": "Bloqué",
"Broadcast": "Broadcast",
"Busy line": "Ligne occupée",
"By email": "Inscription par email",
"By phone": "Par téléphone",
"By": "Par",
@ -107,6 +111,7 @@
"Export": "Exporter",
"External Account": "Compte Externe",
"Features": "Fonctionnalités",
"Forwarding all calls takes priority over the other rules. If you activate this option all the other rules will be disabled.": "Rediriger tous les appels est prioritaire sur les autres rêgles. En activant cette option toutes les autres seront désactivées.",
"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",
"Files": "Fichiers",
@ -119,6 +124,8 @@
"I'm not a robot": "Je ne suis pas un robot",
"Identifier": "Identifiant",
"If you have any questions or need assistance, feel free to contact our support team.":"Si vous avez des questions ou besoin dassistance, notre équipe reste à votre disposition",
"If no one is answering": "Si personne ne répond",
"If the line is busy": "Si la ligne est occupée",
"Import": "Importer",
"In :days days": "Dans :days jours",
"In ini format, will complete the other settings.": "Au format ini, complètera les autres paramètres.",
@ -164,16 +171,17 @@
"No answer": "Pas de réponse",
"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.",
"Or": "Ou",
"Open the app": "Ouvrir l'application",
"Other information": "Autres informations",
"Outbound proxy": "Outbound proxy",
"Line occupied": "Ligne occupée",
"Password": "Mot de passe",
"Phone Countries": "Numéros Internationaux",
"Phone number": "Numéro de 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.",
"Priority rule": "Rêgle prioritaire",
"Protocol": "Protocole",
"Provisioning of your device": "Déploiement sur votre appareil",
"Provisioning tokens": "Jetons de déploiement",

View file

@ -107,7 +107,7 @@ form div {
position: relative;
}
form div .btn,
form.inline div .btn,
form div a.chip {
margin-top: 2.5rem;
}
@ -412,4 +412,9 @@ div.select[data-value=voicemail] ~ div.togglable.voicemail,
div.select[data-value=contact] ~ div.togglable.contact,
div.select[data-value=sip_uri] ~ div.togglable.sip_uri {
display: block;
}
form section.block div.checkbox:has(input:not(:checked)) ~ div {
opacity: 0.25;
pointer-events: none;
}

View file

@ -104,7 +104,8 @@ pre {
color: var(--second-7);
}
b, strong {
b,
strong {
font-weight: bold;
}
@ -147,11 +148,11 @@ p {
margin-bottom: 1rem;
}
p > b {
p>b {
font-weight: bold;
}
p > i {
p>i {
vertical-align: middle;
margin-right: 1rem;
}
@ -382,6 +383,12 @@ form section {
grid-column: 1 / 3;
}
form section.block {
border-radius: 1rem;
padding: 1rem;
background-color: white;
}
.grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
@ -587,7 +594,7 @@ h3 {
border-bottom: 1px solid var(--grey-2);
}
h3 > i {
h3>i {
line-height: 2rem;
margin-right: 1rem;
vertical-align: middle;
@ -643,7 +650,7 @@ h3 .badge {
margin-left: 1rem;
}
h3 .badge + .badge {
h3 .badge+.badge {
margin-left: 0;
}
@ -674,7 +681,7 @@ table {
width: 100%;
}
h3 + table {
h3+table {
margin-top: -0.5rem;
}
@ -1012,7 +1019,7 @@ ol.steps li.active:before {
/** Show/hide toggle **/
details > summary::before {
details>summary::before {
content: "▶";
color: var(--grey-4);
font-size: 1.5rem;
@ -1021,11 +1028,11 @@ details > summary::before {
float: right;
}
details[open] > summary::before {
details[open]>summary::before {
content: "▼";
}
details > summary:hover {
details>summary:hover {
cursor: pointer;
}
@ -1059,4 +1066,60 @@ ul.errors li {
list-style-type: none;
margin: 0;
color: white;
}
span.line {
display: block;
text-align: center;
color: var(--grey-5);
margin-bottom: -0.5rem;
font-size: 1.5rem;
line-height: 2rem;
font-weight: bold;
position: relative;
}
span.line::before {
content: '';
position: absolute;
top: 1rem;
display: block;
width: 100%;
height: 1px;
background-image: linear-gradient(to right, var(--grey-3), transparent, var(--grey-3));
}
i.tooltip {
vertical-align: middle;
font-size: 2rem;
line-height: 3rem;
}
i.tooltip:hover {
cursor: pointer;
}
/* Dialogs */
dialog {
width: 80%;
max-width: 500px;
position: absolute;
top: calc(50% - 20rem);
margin: 0 auto;
padding: 2rem 3rem;
box-sizing: border-box;
}
dialog h2 {
border-bottom: 1px solid var(--grey-3);
}
dialog p {
margin: 2rem 0;
}
dialog::backdrop {
background-color: black;
opacity: 0.5;
}

View file

@ -2,54 +2,91 @@
{{ __('Call Forwarding') }}
</h3>
<dialog id="always_dialog" closedby="any">
<h2>{{ __('Activate call forwarding for all calls?') }}</h2>
<p>{{ __('Forwarding all calls takes priority over the other rules. If you activate this option all the other rules will be disabled.') }}</p>
<button class="btn small oppose" commandfor="always_dialog" onclick="
setCheckboxValue('always[enabled]', true);
setCheckboxValue('away[enabled]', false);
setCheckboxValue('busy[enabled]', false);
document.querySelector('#always_dialog').close()">{{ __('Activate') }}</button>
<button class="btn small oppose secondary" commandfor="always_dialog" command="close" onclick="document.querySelector('#always_dialog').close()">{{ __('Cancel') }}</button>
</dialog>
<dialog id="away_dialog" closedby="any">
<h2>{{ __('Activate conditional call forwarding?') }}</h2>
<p>{{ __('Activating conditional call forwarding will automatically disable the Forward All Calls rule.') }}</p>
<button class="btn small oppose" commandfor="away_dialog" onclick="
setCheckboxValue('always[enabled]', false);
setCheckboxValue('away[enabled]', true);
document.querySelector('#away_dialog').close()">{{ __('Activate') }}</button>
<button class="btn small oppose secondary" commandfor="away_dialog" command="close" onclick="document.querySelector('#away_dialog').close()">{{ __('Cancel') }}</button>
</dialog>
<dialog id="busy_dialog" closedby="any">
<h2>{{ __('Activate conditional call forwarding?') }}</h2>
<p>{{ __('Activating conditional call forwarding will automatically disable the Forward All Calls rule.') }}</p>
<button class="btn small oppose" commandfor="busy_dialog" onclick="
setCheckboxValue('always[enabled]', false);
setCheckboxValue('busy[enabled]', true);
document.querySelector('#busy_dialog').close()">{{ __('Activate') }}</button>
<button class="btn small oppose secondary" commandfor="busy_dialog" command="close" onclick="document.querySelector('#busy_dialog').close()">{{ __('Cancel') }}</button>
</dialog>
<form id="edit" method="POST" action="@if ($account->admin) {{ route('admin.account.call_forwardings.update', $account->id) }}@else{{ route('account.call_forwardings.update') }}@endif" accept-charset="UTF-8">
@csrf
@method('put')
@php($callForwardings = $account->callForwardingsDefault)
<section>
<h4>{{ __('All the calls') }}</h4>
<section class="block">
<div>
<i class="ph ph-info oppose tooltip" title="{{ __('All incoming calls are forwarded, whether you answer, decline the call or are already on a call.') }}"></i>
<h4>{{ __('All the calls') }}</h4>
</div>
<div class="checkbox">
<span class="badge">{{ __('Priority rule') }}</span>
<input id="always[enabled]" type="checkbox" @if ($callForwardings['always']->enabled) checked @endif name="always[enabled]"
onchange="if (this.checked) { setCheckboxValue('away[enabled]', false); setCheckboxValue('busy[enabled]', false); }">
onchange="if (this.checked) { setCheckboxValue('always[enabled]', false); document.querySelector('#always_dialog').showModal(); }">
<label for="always[enabled]"></label>
</div>
@include('account.call_forwardings.edit_select_part', ['callForwarding' => $callForwardings, 'type' => 'always'])
@if (!$account->admin)
<small class="large">{{ __('All incoming calls are forwarded, whether you answer, decline the call or are already on a call.') }}</small>
@endif
</section>
<section>
<h4>{{ __('No answer') }}</h4>
<span class="line large">{{ __('Or') }}</span>
<section class="block">
<div>
<i class="ph ph-info oppose tooltip" title="{{ __('Calls are only forwarded when your line is busy with another call.') }}"></i>
<h4>@if ($account->admin){{ __('No answer') }}@else{{ __('If no one is answering') }}@endif</h4>
</div>
<div class="checkbox">
<input id="away[enabled]" type="checkbox" @if ($callForwardings['away']->enabled) checked @endif name="away[enabled]"
onchange="if (this.checked) { setCheckboxValue('always[enabled]', false); }">
onchange="if (this.checked) { setCheckboxValue('away[enabled]', false); document.querySelector('#away_dialog').showModal(); }">
<label for="away[enabled]"></label>
</div>
@include('account.call_forwardings.edit_select_part', ['callForwarding' => $callForwardings, 'type' => 'away'])
@if (!$account->admin)
<small class="large">{{ __('Calls are only forwarded when your line is busy with another call.') }}</small>
@endif
</section>
<section>
<h4>{{ __('Line occupied') }}</h4>
<section class="block">
<div>
<i class="ph ph-info oppose tooltip" title="{{ __('Calls are only forwarded if you do not answer or if you decline the call.') }}"></i>
<h4>@if ($account->admin){{ __('Busy line') }}@else{{ __('If the line is busy') }}@endif</h4>
</div>
<div class="checkbox">
<input id="busy[enabled]" type="checkbox" @if ($callForwardings['busy']->enabled) checked @endif name="busy[enabled]"
onchange="if (this.checked) { setCheckboxValue('always[enabled]', false); }">
onchange="if (this.checked) { setCheckboxValue('busy[enabled]', false); document.querySelector('#busy_dialog').showModal(); }">
<label for="busy[enabled]"></label>
</div>
@include('account.call_forwardings.edit_select_part', ['callForwarding' => $callForwardings, 'type' => 'busy'])
@if (!$account->admin)
<small class="large">{{ __('Calls are only forwarded if you do not answer or if you decline the call.') }}</small>
@endif
</section>
<div class="large">

View file

@ -28,7 +28,7 @@
<label for="password">{{ __('Password') }}</label>
</div>
<div>
<input class="btn" type="submit" value="{{ __('Login') }}">
<input class="btn" style="margin-top: 2.5rem;" type="submit" value="{{ __('Login') }}">
</div>
</form>

View file

@ -11,7 +11,7 @@
@include('admin.account.parts.tabs')
<div class="grid">
<div class="card">
<div class="card large">
@include('account.call_forwardings.edit', ['account' => $account])
</div>
</div>

View file

@ -21,7 +21,6 @@
@php
$items = [];
$items['account.dashboard'] = ['title' => __('My Account'), 'icon' => 'gauge'];
$items['account.telephony'] = ['title' => __('Telephony'), 'icon' => 'phone'];
@endphp