]> _ Git - spinepro.git/commitdiff
wip #7601 @6:00
authorsoufiane <soufiane@cubedesigners.com>
Mon, 23 Jun 2025 16:18:45 +0000 (18:18 +0200)
committersoufiane <soufiane@cubedesigners.com>
Mon, 23 Jun 2025 16:18:45 +0000 (18:18 +0200)
wp-content/mu-plugins/cube/src/Forms/Builder/Fields/Password.php [new file with mode: 0644]
wp-content/mu-plugins/cube/src/Forms/Consultation.php
wp-content/themes/CCV/resources/views/forms/consultation.blade.php

diff --git a/wp-content/mu-plugins/cube/src/Forms/Builder/Fields/Password.php b/wp-content/mu-plugins/cube/src/Forms/Builder/Fields/Password.php
new file mode 100644 (file)
index 0000000..e54f9f9
--- /dev/null
@@ -0,0 +1,12 @@
+<?php
+
+namespace Cube\Forms\Builder\Fields;
+
+use Cube\Forms\Builder\Field;
+
+class Password extends Field
+{
+    public function render($settings) {
+        return '<input type="password" name="'. $this->get_name() .'" placeholder="'. $settings['placeholder'] .'" '. $settings['validation'] .'>';
+    }
+}
index 5722bc8ee3ec435084074c37b7d8e3ec26ca7360..07c791d4490139a5aaa4e920d307ffe2405a7bd8 100644 (file)
@@ -7,6 +7,7 @@ use Cube\Forms\Builder\Fields\Checkbox;
 use Cube\Forms\Builder\Fields\Date;
 use Cube\Forms\Builder\Fields\Email;
 use Cube\Forms\Builder\Fields\Hidden;
+use Cube\Forms\Builder\Fields\Password;
 use Cube\Forms\Builder\Fields\Radio;
 use Cube\Forms\Builder\Fields\Select;
 use Cube\Forms\Builder\Fields\Text;
@@ -53,6 +54,7 @@ class Consultation extends Base {
                     _x('Email', 'Email', 'ccv'),
                     _x('Phone', 'Phone', 'ccv'),
                 ]),
+            Textarea::field('find_us', 'How did you find us ?'),
                        Text::field('age', __('Âge :', 'ccv')),
                        Text::field('occupation', __('Occupation', 'ccv')),
                        Text::field('nationality', __('Nationality', 'ccv')),
@@ -65,6 +67,12 @@ class Consultation extends Base {
                                        __('No', 'ccv'),
                                ]),
 
+            Radio::field('idiopathic-ad-scoliosis', __('Have you been diagnosed with Idiopathic Adolescent Scoliosis?', 'ccv'))
+                ->options([
+                    __('Yes', 'ccv'),
+                    __('No', 'ccv'),
+                ]),
+
             Radio::field('chronic-pain', __('Are you suffering with (chronic) back pain and sciatica?', 'ccv'))
                 ->options([
                     __('Yes', 'ccv'),
@@ -92,7 +100,8 @@ class Consultation extends Base {
                     __('No', 'ccv'),
                 ]),
 
-            Radio::field('willing-to-travel', __('Are you willing to travel to Montpellier, France? Your stay would be, typically, 9 days in total.', 'ccv'))
+
+            Radio::field('willing-to-travel', __('Are you willing to travel to Montpellier, France? Your stay would typically be, 9 days in total.', 'ccv'))
                 ->options([
                     __('Yes', 'ccv'),
                     __('No', 'ccv'),
@@ -103,7 +112,123 @@ class Consultation extends Base {
                     __('Yes', 'ccv'),
                     __('No', 'ccv'),
                 ]),
-               ]);
+
+            //=== PERSONAL INFORMATION
+            Select::field('surgeon', __('Chirurgien spécifique', 'ccv'))
+                ->required(false)
+                ->options([
+                    'Dr Guilhaume GENESTE' => 'dr.geneste@ccv-montpellier.fr',
+                    'Dr Grégory EDGARD-ROSA' => 'dr.edgard-rosa@ccv-montpellier.fr',
+                    'Dr Martin GRAU ORTIZ' => 'dr.grauortiz@ccv-montpellier.fr',
+                    'Dr Caroline HIRSH' => 'dr.hirsch@ccv-montpellier.fr',
+                ]),
+            Text::field('last-name', __('Nom', 'ccv')),
+            Text::field('first-name', __('Prénom', 'ccv')),
+            Radio::field('sex', __('Sexe :', 'ccv'))
+                ->options([
+                    _x('M', 'Sexe (M)', 'ccv'),
+                    _x('F', 'Sexe (F)', 'ccv'),
+                ]),
+            Date::field('birthdate', __('Date de naissance', 'ccv')),
+            Text::field('size', 'Height:'),
+            Text::field('weight', 'Weight:'),
+            Text::field('profession', __('Profession', 'ccv')),
+            Text::field('postcode', __('Code postal', 'ccv')),
+            Text::field('city', __('Ville', 'ccv')),
+            Text::field('country', __('Pays', 'ccv')),
+            Text::field('phone', __('Tel', 'ccv')),
+            Email::field('email', __('Email', 'ccv')),
+
+            // Social cover
+            Radio::field('social-cover', __('Couverture sociale :', 'ccv'))
+                ->options([
+                    __('Sécurité sociale', 'ccv'),
+                    __('Assurance privée', 'ccv'),
+                    __('Régime de la CMU/ASC/PUMa/CSS', 'ccv'),
+                    __('Accident du travail', 'ccv'),
+                ]),
+            Date::field('work-accident', __('Si accident du travail à quelle date ?', 'ccv'))->required(false),
+
+            // Chirurgical solutions
+            Radio::field('chirurgical-solutions', __('Êtes-vous à la recherche de solutions chirurgicales pour votre problème de dos ?', 'ccv'))
+                ->options([
+                    __('Oui, s\'il existe des solutions satisfaisantes', 'ccv'),
+                    __('Non, pas encore à ce stade', 'ccv'),
+                ]),
+            //== SYMPTOMS
+            Radio::field('main-problem', __('Problème principal', 'ccv'))
+                ->options([
+                    __('Lumbar back pain', 'ccv'),
+                    __('Sciatica', 'ccv'),
+                    __('Idiopathic Adolescent Scoliosis', 'ccv'),
+                ]),
+            Date::field('date-first-symptoms', __('Date des premiers symptômes :', 'ccv')),
+            Date::field('date-pain-since', __('Douleurs permanentes depuis (le cas échéant) :', 'ccv'))->required(false),
+            Binary::field('pain-arms-legs', __('Avez-vous des douleurs dans les bras ou les jambes (sciatiques, cruralgies, névralgies) ?', 'ccv')),
+            Checkbox::field('pain-arms-legs-detail', 'If yes, please tick the relevant limbs in the diagram below:')
+                ->required(false)
+                ->options([
+                    __('Haut du bras droit', 'ccv'),
+                    __('Haut du bras gauche', 'ccv'),
+                    __('Avant-bras droit', 'ccv'),
+                    __('Avant-bras gauche', 'ccv'),
+                    __('Haut de la jambe droite', 'ccv'),
+                    __('Haut de la jambe gauche', 'ccv'),
+                    __('Bas de la jambe droite', 'ccv'),
+                    __('Bas de la jambe gauche', 'ccv'),
+                ]),
+
+            Radio::field('main-pain', __('La douleur principale est-elle ?', 'ccv'))
+                ->options([
+                    __('Dans la colonne', 'ccv'),
+                    __('Dans les membres', 'ccv'),
+                    __('Les deux', 'ccv'),
+                ]),
+
+            Binary::field('tingling-numbness', __('Avez-vous des fourmillements ou une sensation d’engourdissement dans un des membres ? ', 'ccv')),
+            Date::field('tingling-numbness-date', __('Si oui depuis quand ?', 'ccv'))->required(false),
+            Binary::field('strength-loss', __('Avez-vous une perte de force importante dans un des membres ?', 'ccv')),
+            Date::field('strength-loss-date', __('Si oui depuis quand ?', 'ccv'))->required(false),
+            Textarea::field('symptoms', 'Tell us in a few words how your symptoms disable you most:'),
+            Textarea::field('surgeries', __('Indiquez ici vos précédentes chirurgies de la colonne et leurs dates (le cas échéant)', 'ccv'))->required(false),
+
+            // Unique session identifier for uploads that go directly to CCV's NAS (upload.ccv-montpellier.fr)
+            // Made up of timestamp YYMMDDHHMM + nonce
+            Hidden::field('imagery-phone-token', __('ID sur le NAS', 'ccv'))->value(date('ymdHi') . '_' . wp_create_nonce('NAS-upload')),
+
+            //=== TREATMENTS
+            Binary::field('kine-osteo', __('Kinésithérapie ou ostéopathie', 'ccv')),
+            Binary::field('infiltration', __('Infiltration ou thermocoagulation', 'ccv')),
+            Binary::field('rheumatological', __('Suivi rhumatologique ou médecine spécialisée', 'ccv')),
+            Binary::field('corset', __('Corset ou ceinture lombaire', 'ccv')),
+            Binary::field('hospitalisation', __('Séjour en hospitalisation', 'ccv')),
+            Textarea::field('medication', __('Indiquez ici les médicaments que vous avez pris pour vos douleurs (le cas échéant)', 'ccv'))->required(false),
+            //=== IMAGERY
+            // This is a special case and will be output manually so only using this for the e-mail label
+            Textarea::field('imagery-online', __('Images en ligne', 'ccv'))->required(false), // Again, a manually handled field
+            Checkbox::field('imagery-posted', __('Images envoyées par courrier', 'ccv'))->required(false),
+            Radio::field('imagery-type', __('Imagerie', 'ccv'))->required(false),
+            Radio::field('imagery-condition', __('IRM de moins de 6 mois', 'ccv'))
+                ->options([
+                    __('J\'ai bien noté que mon dossier ne pourra être étudié si je ne fournis pas une IRM de moins de 6 mois', 'ccv'),
+                ]),
+
+            Text::field('link-1', __('Lien internet 1', 'ccv'))->required(false),
+            Text::field('id-1', __('Identifiant', 'ccv'))->required(false),
+            Password::field('pwd-1', __('Mot de passe', 'ccv'))->required(false),
+            Text::field('link-2', __('Lien internet 2', 'ccv'))->required(false),
+            Text::field('id-2', __('Identifiant 2', 'ccv'))->required(false),
+            Password::field('pwd-2', __('Mot de passe 2', 'ccv'))->required(false),
+            Text::field('link-3', __('Lien internet 3', 'ccv'))->required(false),
+            Text::field('id-3', __('Identifiant 3', 'ccv'))->required(false),
+            Password::field('pwd-3', __('Mot de passe 3', 'ccv'))->required(false),
+            Text::field('link-4', __('Lien internet 4', 'ccv'))->required(false),
+            Text::field('id-4', __('Identifiant 4', 'ccv'))->required(false),
+            Password::field('pwd-4', __('Mot de passe 4', 'ccv'))->required(false),
+
+            Textarea::field('message', __('Avez vous un message (ou une demande) spécifique à nous formuler ?', 'ccv'))->required(false),
+
+        ]);
        }
 
        /*public function pre_process() {
index 01e369f81fe41158540cc45cb3777f93ff45a85f..b874cfc55eafbb7b11a1778f1cec404b56283305 100644 (file)
 
     <div class="spaced-lg">
       {!! $form->field('sexe', ['class' => 'flex items-center spaced-horizontal', 'title_class' => 'font-light mb-0']) !!}
+      <div class="flex spaced-horizontal justify-between">
+        {!! $form->field('size', [
+          'class' => 'flex items-center spaced-horizontal',
+          'title_class' => 'font-light mb-0',
+          'input_class' => 'flex items-center w-24',
+          'placeholder' => '',
+          'field_after' => __('cm', 'ccv')
+        ]) !!}
+        {!! $form->field('weight', [
+          'class' => 'flex items-center spaced-horizontal',
+          'title_class' => 'font-light mb-0',
+          'input_class' => 'flex items-center w-24',
+          'placeholder' => '',
+          'field_after' => __('kg', 'ccv')
+        ]) !!}
+      </div>
       {!! $form->field('occupation', ['show_title' => false]) !!}
       {!! $form->field('nationality', ['show_title' => false]) !!}
       {!! $form->field('contact_preference', ['class' => 'flex items-center spaced-horizontal', 'title_class' => 'font-light mb-0']) !!}
+      {!! $form->field('find_us') !!}
     </div>
   </div>
 
       <li>{!! $form->field('lumbar-mri-scan') !!}</li>
     </ul>
     <ul class="spaced-lg">
-      <li>{!! $form->field('cortisone-injection') !!}</li>
+      <li>{!! $form->field('idiopathic-ad-scoliosis') !!}</li>
       <li>{!! $form->field('ready-for-surgery') !!}</li>
       <li>{!! $form->field('willing-to-travel') !!}</li>
       <li>{!! $form->field('able-to-self-fund') !!}</li>
     </ul>
   </div>
+</div>
+
+
+<div class="bg-white text-block-body py-2v pl-4v pr-3v xs:px-2v">
+  <h2>{{ __('1. Vos symptômes', 'ccv') }}</h2>
+
+  @php $date_placeholder = __('JJ/MM/AAAA', 'ccv'); @endphp
+
+  <div class="form-cols-2 mt-1v">
+
+    <ul class="spaced-lg">
+      <li>{!! $form->field('main-problem') !!}</li>
+      <li>
+        {!!
+          $form->field('date-first-symptoms', [
+            'placeholder' => $date_placeholder,
+            'class' => 'flex items-center spaced-horizontal',
+            'title_class' => 'mb-0',
+            'input_class' => 'date-field-compact',
+            'flatpickr' => [
+              'maxDate' => 'today'
+            ]
+          ])
+        !!}
+      </li>
+      <li>
+        {!!
+          $form->field('date-pain-since', [
+            'placeholder' => $date_placeholder,
+            'class' => 'flex items-center spaced-horizontal',
+            'title_class' => 'mb-0',
+            'input_class' => 'date-field-compact',
+            'flatpickr' => [
+                'maxDate' => 'today'
+            ]
+          ])
+        !!}
+      </li>
+      <li>
+        {!! $form->field('pain-arms-legs') !!}
+
+        <div class="form-field mt-6 flex-wrap">
+          {!! $form->title('pain-arms-legs-detail', ['title_class' => 'pr-4']) !!}
+          <div class="custom-checkbox pt-2 mt-0 w-full xs:text-center">
+            <div class="pain-areas">
+              <img src="@asset('images/consultation-body-outline.svg')" class="consultation-body-outline-image">
+
+              <span class="absolute text-2xs font-medium" style="top: 5%; right: 70%">{{ __('Droite', 'ccv') }}</span>
+              <span class="absolute text-2xs font-medium" style="top: 5%; left: 69%">{{ __('Gauche', 'ccv') }}</span>
+
+              @foreach ($form->get_field('pain-arms-legs-detail')->get_options() as $option)
+                <label title="{{ $option }}">
+                  <input type="checkbox" name="pain-arms-legs-detail[]" value="{{ $option }}">
+                  <span
+                          class="form-label">{{-- No label here but the element is needed so custom checkboxes work --}}</span>
+                </label>
+              @endforeach
+            </div>
+          </div>
+        </div>
+
+      </li>
+      <li>{!! $form->field('main-pain') !!}</li>
+    </ul>
+
+    <ul class="spaced-lg">
+      <li>{!! $form->field('tingling-numbness') !!}</li>
+      <li>
+        {!!
+          $form->field('tingling-numbness-date', [
+            'placeholder' => $date_placeholder,
+            'class' => 'flex items-center spaced-horizontal',
+            'title_class' => 'mb-0',
+            'input_class' => 'date-field-compact',
+            'flatpickr' => [
+                'maxDate' => 'today'
+            ]
+          ])
+        !!}
+      </li>
+      <li>{!! $form->field('strength-loss') !!}</li>
+      <li>
+        {!!
+          $form->field('strength-loss-date', [
+            'placeholder' => $date_placeholder,
+            'class' => 'flex items-center spaced-horizontal',
+            'title_class' => 'mb-0',
+            'input_class' => 'date-field-compact',
+            'flatpickr' => [
+                'maxDate' => 'today'
+            ]
+          ])
+        !!}
+      </li>
+      {!! $form->field('symptoms', ['title_class' => 'font-light']) !!}
+    </ul>
+
+  </div>
+
+</div>
+
+
+<div class="bg-light py-2v pl-4v pr-3v xs:px-2v">
+  <h2>{{ __('2. Vos traitements réalisés', 'ccv') }}</h2>
+
+  <div class="spaced-lg mt-1v">
+    {!! $form->field('medication', ['title_class' => 'font-light']) !!}
+
+    <div class="form-cols-4">
+      {!! $form->field('kine-osteo') !!}
+      {!! $form->field('corset') !!}
+      {!! $form->field('hospitalisation') !!}
+      {!! $form->field('infiltration') !!}
+    </div>
+
+    {!! $form->field('rheumatological') !!}
+
+    {!! $form->field('surgeries', ['title_class' => 'font-light']) !!}
+  </div>
+
+</div>
+
+
+<div class="bg-white py-2v pl-4v pr-3v xs:px-2v">
+  <h2>{{ __('3. Votre imagerie', 'ccv') }}</h2>
+
+  <div class="custom-checkbox my-1v">
+    <label>
+      <input type="checkbox" name="imagery-condition" value="Oui" required>
+      <span
+              class="form-label text-lg font-normal leading-tight">{{ __('J\'ai bien noté que mon dossier ne pourra être étudié si je ne fournis pas une IRM de moins de 6 mois.', 'ccv') }}</span>
+      <span class="text-sm font-normal" style="margin-left: 33px;">{{ __("En cas de pathologie de scoliose, envoyez-nous impérativement une radiographie du rachis en totalité, en place de l'IRM.", 'ccv') }}</span>
+    </label>
+  </div>
+
+  <p class="text-lg my-1v font-normal leading-tight">
+    {{ __("Faites-nous parvenir également vos imageries les plus récentes (Scanner, Radiographies…) en utilisant l'une des méthodes suivantes :", 'ccv') }}
+  </p>
+
+  <div class="mt-8">
+    {{-- IMAGES ONLINE --}}
+    <div class="imagery-type-wrapper mb-8">
+      <div class="flex mb-8">
+        <label for="imagery_web" class="imagery-icon">@svg('imagery-web', 'w-22 md:w-20 sm:w-16')</label>
+        <div class="ml-4">
+          <div class="text-lg sm:text-base font-normal leading-tight mb-1">
+            {{ __('Vous avez reçu un lien pour consulter vos images en ligne ?', 'ccv') }}
+          </div>
+          <p class="mt-0 mb-0! pb-2 sm:text-sm">
+            {{ __('Collez votre lien ci-dessous ainsi que vos identifiant et mot de passe :', 'ccv') }}
+          </p>
+        </div>
+      </div>
+      <div class="ml-4">
+        <div class="form-cols-2 flex">
+          @for($i = 1; $i < 5; $i++)
+            <div class="mb-8 spaced-lg imagery-link-block">
+              {!! $form->field("link-$i", ['show_title' => false, 'placeholder' => __('Lien internet', 'ccv').' '.$i]) !!}
+              {!! $form->field("id-$i", ['show_title' => false, 'placeholder' => __('Identifiant','ccv')]) !!}
+              {!! $form->field("pwd-$i", ['show_title' => false, 'placeholder' => __('Mot de passe', 'ccv')]) !!}
+            </div>
+          @endfor
+        </div>
+      </div>
+    </div>
+  </div>
+  <p class="text-xs italic ml-4">
+    {{ __("Aucune demande d’avis ne pourra être étudiée sans imagerie médicale associée.", 'ccv') }}
+  </p>
+
+
   {!!
     $form->button(__('Submit', 'ccv'), [
       'class' => 'btn block mt-2v mx-auto',
 </div>
 
 
+
 {{-- Custom classes for form message container --}}
 @push('message_class')
   py-2v pl-4v pr-3v xs:px-2v