--- /dev/null
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Mail;
+use App\Mail\Shared;
+
+class EmailConsultationUnnecessaryController extends EmailController
+{
+ public $snippets;
+ public $title;
+
+ public function __construct() {
+
+ $this->title = "Consultation inutile";
+
+ $this->snippets = [
+
+ "Symptômes trop récents" =>
+ "Vos symptômes sont trop récents pour une consultation chirurgicale. Il faudra passer une IRM s’ils persistent au-delà de 6 semaines ou si vous ressentez une perte de force dans le membre.",
+
+ "Discopathie trop peu évoluée" =>
+ "La lésion de discopathie est encore trop peu évoluée pour envisager une chirurgie de remplacement discale. Un centre de rééducation type école du dos serait plus adapté à ce stade.",
+
+ "Parcours pas complet" =>
+ "Votre parcours de soin n’est pas complet, car vous n’avez pas encore effectué de kinésithérapie, indispensable avant de prendre un avis chirurgical pour un problème de lombalgie.",
+
+ "Absence de douleurs membres" =>
+ "En l’absence de douleurs irradiant dans un des membres, il n’y a pas lieu d’envisager un traitement chirurgical de votre hernie discale.",
+
+ "Scoliose angulation limite" =>
+ "Votre fille a une scoliose avec une angulation qui reste en dessous de la limite à partir de laquelle une chirurgie est recommandée. Elle pourra faire encore une dernière radiographie de contrôle dans 1 an, mais à priori sa scoliose ne devrait plus évoluer beaucoup.",
+
+ "Infiltration foraminale" =>
+ "Selon la tolérance de vos douleurs, vous pouvez commencer par une infiltration foraminale sous scanner que votre médecin pourrait vous prescrire. La chirurgie peut être indiquée si les douleurs persistent au-delà de 2 mois d’évolution.",
+
+ ];
+ }
+
+ public function index(Request $request) {
+
+ $page_title = $this->title;
+ $editable_message = $this->getEditableMessage('views/consultation-unnecessary/message.html');
+ $snippets = $this->snippets;
+ $name = $request->get('name');
+ $email = $request->get('email');
+ $message = $request->get('message');
+ $action = $request->get('action');
+
+ if ($name && $email && $message) {
+
+ $message_html = $this->renderQuill($message);
+
+ $message_html = $this->replaceTokens($message_html, [
+ 'NOM' => $name,
+ ]);
+
+ // Data used by views and mailable object
+ $data = compact('name', 'email', 'message_html');
+
+ if ($action === 'send') {
+
+ try {
+ Mail::to($email)->send(new Shared($data));
+ return redirect('/consultation-unnecessary')->with('message', 'Message envoyé avec succès !');
+
+ } catch (\Swift_TransportException $STe) {
+ $title = "Erreur lors de l'envoi de l'e-mail";
+ $details = $STe->getMessage();
+ return view('error', compact('title', 'details'));
+ }
+ }
+
+ return view('shared.email', ['layout' => 'layouts.preview', 'post_data' => $request->post()] + $data);
+ }
+
+ return view('shared.form', compact('page_title', 'editable_message', 'snippets'));
+ }
+}
namespace App\Http\Controllers;
-use Illuminate\Http\Request;
-use Illuminate\Support\Facades\Mail;
-use App\Mail\Diagnosis;
+use DBlackborough\Quill;
class EmailController extends Controller
{
- public $surgeons;
- public $pathologies;
+ public function getEditableMessage($name, $convert_line_breaks = true) {
- public function __construct() {
+ $content = file_get_contents(resource_path($name));
- $this->surgeons = [
- 'Guilhaume GENESTE' => [
- 'profile' => 'https://www.ccv-montpellier.fr/la-clinique/lequipe/dr-guilhaume-geneste/',
- 'bookings' => 'https://www.doctolib.fr/chirurgien-orthopediste/castelnau-le-lez/guilhaume-geneste',
- 'e-consultation' => 'https://www.consulib.com/home?showSearch=true&specialties_doctor=Guilhaume%20GENESTE&when=true&doctor=5e6fa162811d5599a6c54d96',
- ],
- 'Grégory EDGARD-ROSA' => [
- 'profile' => 'https://www.ccv-montpellier.fr/la-clinique/lequipe/dr-gregory-edgard-rosa/',
- 'bookings' => 'https://www.doctolib.fr/chirurgien-orthopediste/castelnau-le-lez/gregory-edgard-rosa',
- 'e-consultation' => 'https://www.consulib.com/home?showSearch=true&specialties_doctor=Gr%C3%A9gory%20Edgard-Rosa&when=true&doctor=5e306e4e0d359a1ab793d3e8',
- ],
- 'Martin GRAU ORTIZ' => [
- 'profile' => 'https://www.ccv-montpellier.fr/la-clinique/lequipe/dr-martin-grau-ortiz/',
- 'bookings' => 'https://www.doctolib.fr/chirurgien-orthopediste/castelnau-le-lez/martin-grau-ortiz',
- 'e-consultation' => 'https://www.consulib.com/home?showSearch=true&specialties_doctor=Martin%20Grau-Ortiz&when=true&doctor=5e70cddc90de0faef245adcc',
- ],
- 'Caroline HIRSCH' => [
- 'profile' => 'https://www.ccv-montpellier.fr/la-clinique/lequipe/dr-caroline-hirsh/',
- 'bookings' => 'https://www.doctolib.fr/chirurgien-orthopediste/castelnau-le-lez/caroline-hirsch-castelnau-le-lez',
- 'e-consultation' => 'https://www.consulib.com/home?showSearch=true&specialties_doctor=caroline%20hirsch&when=true&doctor=5e6f7aff811d5599a69e4b61',
- ],
- ];
+ if (!$convert_line_breaks) return $content;
- $this->pathologies = [
- 'Canal lombaire étroit' => 'https://www.ccv-montpellier.fr/wp-content/uploads/2020/04/Canal_lombaire_etroit.pdf',
- 'Discopathie lombaire' => 'https://www.ccv-montpellier.fr/wp-content/uploads/2020/04/Discopathie_lombaire.pdf',
- 'Hernie discale cervicale' => 'https://www.ccv-montpellier.fr/wp-content/uploads/2020/04/Hernie_discale_cervicale.pdf',
- 'Hernie discale' => 'https://www.ccv-montpellier.fr/wp-content/uploads/2020/04/Hernie_discale.pdf',
- 'Scoliose de l’adolescence' => 'https://www.ccv-montpellier.fr/wp-content/uploads/2020/04/Scoliose_adolescence.pdf',
- 'Scoliose du vieillissement' => 'https://www.ccv-montpellier.fr/wp-content/uploads/2020/04/Scoliose_vieillissement.pdf',
- 'Spondylolisthesis' => 'https://www.ccv-montpellier.fr/wp-content/uploads/2020/04/Spondylolisthesis.pdf',
- 'Tassement vertébral' => 'https://www.ccv-montpellier.fr/wp-content/uploads/2020/04/Tassement_vertebral.pdf',
- ];
+ // Instead of using nl2br(), we do a proper find and *replace* of line breaks
+ // If we don't do this, Quill ends up with extra spaces at the start of lines
+ return str_replace(["\r\n", "\r", "\n"], "<br>", $content);
}
- public function diagnosis(Request $request) {
-
- $surgeons = $this->surgeons;
- $pathologies = $this->pathologies;
- $dr = $request->get('dr');
- $pathology = $request->get('pathology');
- $name = $request->get('name');
- $email = $request->get('email');
- $action = $request->get('action');
-
- if ($dr && $pathology && $name && $email) {
-
- $data = compact('dr', 'pathology', 'name', 'email', 'surgeons', 'pathologies');
-
- if ($action === 'send') {
-
- try {
- Mail::to($email)->send(new Diagnosis($data));
- return redirect('/diagnosis')->with('message', 'Message envoyé avec succès !');
+ public function renderQuill($quill_JSON) {
+ try {
+ $quill = new Quill\Render($quill_JSON, 'HTML');
+ return $quill->render();
+ } catch (\Exception $e) {
+ echo $e->getMessage();
+ }
+ return false;
+ }
- } catch (\Swift_TransportException $STe) {
- $title = "Erreur lors de l'envoi de l'e-mail";
- $details = $STe->getMessage();
- return view('error', compact('title', 'details'));
- }
- }
+ public function replaceTokens($content, $replacements) {
- return view('diagnosis.email', ['layout' => 'layouts.preview', 'post_data' => $request->post()] + $data);
+ foreach ($replacements as $token => $replacement) {
+ $content = str_replace("{{ $token }}", $replacement, $content);
}
- return view('diagnosis.form', compact('surgeons', 'pathologies'));
+ return $content;
}
}
--- /dev/null
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Mail;
+use App\Mail\Diagnosis;
+
+class EmailDiagnosisController extends EmailController
+{
+ public $surgeons;
+ public $pathologies;
+ public $snippets;
+
+ public function __construct() {
+
+ $this->surgeons = [
+ 'Guilhaume GENESTE' => [
+ 'profile' => 'https://www.ccv-montpellier.fr/la-clinique/lequipe/dr-guilhaume-geneste/',
+ 'bookings' => 'https://www.doctolib.fr/chirurgien-orthopediste/castelnau-le-lez/guilhaume-geneste',
+ 'e-consultation' => 'https://www.consulib.com/home?showSearch=true&specialties_doctor=Guilhaume%20GENESTE&when=true&doctor=5e6fa162811d5599a6c54d96',
+ ],
+ 'Grégory EDGARD-ROSA' => [
+ 'profile' => 'https://www.ccv-montpellier.fr/la-clinique/lequipe/dr-gregory-edgard-rosa/',
+ 'bookings' => 'https://www.doctolib.fr/chirurgien-orthopediste/castelnau-le-lez/gregory-edgard-rosa',
+ 'e-consultation' => 'https://www.consulib.com/home?showSearch=true&specialties_doctor=Gr%C3%A9gory%20Edgard-Rosa&when=true&doctor=5e306e4e0d359a1ab793d3e8',
+ ],
+ 'Martin GRAU ORTIZ' => [
+ 'profile' => 'https://www.ccv-montpellier.fr/la-clinique/lequipe/dr-martin-grau-ortiz/',
+ 'bookings' => 'https://www.doctolib.fr/chirurgien-orthopediste/castelnau-le-lez/martin-grau-ortiz',
+ 'e-consultation' => 'https://www.consulib.com/home?showSearch=true&specialties_doctor=Martin%20Grau-Ortiz&when=true&doctor=5e70cddc90de0faef245adcc',
+ ],
+ 'Caroline HIRSCH' => [
+ 'profile' => 'https://www.ccv-montpellier.fr/la-clinique/lequipe/dr-caroline-hirsh/',
+ 'bookings' => 'https://www.doctolib.fr/chirurgien-orthopediste/castelnau-le-lez/caroline-hirsch-castelnau-le-lez',
+ 'e-consultation' => 'https://www.consulib.com/home?showSearch=true&specialties_doctor=caroline%20hirsch&when=true&doctor=5e6f7aff811d5599a69e4b61',
+ ],
+ ];
+
+ $this->pathologies = [
+ 'Canal lombaire étroit' => 'https://www.ccv-montpellier.fr/wp-content/uploads/2020/04/Canal_lombaire_etroit.pdf',
+ 'Discopathie lombaire' => 'https://www.ccv-montpellier.fr/wp-content/uploads/2020/04/Discopathie_lombaire.pdf',
+ 'Hernie discale cervicale' => 'https://www.ccv-montpellier.fr/wp-content/uploads/2020/04/Hernie_discale_cervicale.pdf',
+ 'Hernie discale' => 'https://www.ccv-montpellier.fr/wp-content/uploads/2020/04/Hernie_discale.pdf',
+ 'Scoliose de l’adolescence' => 'https://www.ccv-montpellier.fr/wp-content/uploads/2020/04/Scoliose_adolescence.pdf',
+ 'Scoliose du vieillissement' => 'https://www.ccv-montpellier.fr/wp-content/uploads/2020/04/Scoliose_vieillissement.pdf',
+ 'Spondylolisthesis' => 'https://www.ccv-montpellier.fr/wp-content/uploads/2020/04/Spondylolisthesis.pdf',
+ 'Tassement vertébral' => 'https://www.ccv-montpellier.fr/wp-content/uploads/2020/04/Tassement_vertebral.pdf',
+ ];
+
+ $this->snippets = [
+ "Complément scanner" => "Un complément d’imagerie par un scanner lombaire de moins de 12 mois va être utile pour déterminer le choix de l’implant de remplacement discal. Muni de celui-ci, vous pourrez vous rapprocher de notre secrétariat pour l’envoi des images et prendre ainsi RDV en consultation.",
+
+ "Complément IRM" => "Un complément d’imagerie par une IRM lombaire de moins de 12 mois va être utile pour discuter la qualité de l’indication opératoire, qui n’est pas systématique dans ce type de cas. Muni de celle-ci, vous pourrez vous rapprocher de notre secrétariat pour l’envoi des images et prendre ainsi RDV en consultation.",
+
+ "Bonne indication de prothèse" => "Le fait que cette discopathie soit à la fois très évoluée, très inflammatoire et unique, en fait une très bonne indication de prothèse discale. Un scanner lombaire sera néanmoins nécessaire pour confirmer l’indication opératoire et le choix de l’implant.",
+
+ "Aucune indication chirurgicale formelle" => "Votre dossier est néanmoins complexe, car vos discopathies sont multiples.
Il n'y a donc chez vous aucune indication chirurgicale formelle, mais une possibilité de discuter un geste chirurgical non obligatoire.",
+
+ "Lésions discales légères" => "Votre dossier nécessite une discussion subtile car vos lésions discales sont assez légères alors que vos symptômes semblent être importants. La décision de pose de prothèse discale ne sera donc pas systématique. ",
+
+ "Ablation hernie ou remplacement discal" => "Typiquement, il existe une discussion chez vous entre réaliser à nouveau à l’ablation de votre hernie discale, ou bien procéder à une chirurgie de remplacement discal pour un traitement plus global de votre pathologie.",
+
+ "Évaluation chirurgicale de situation" => "La hernie est assez volumineuse, et vos douleurs résistent au traitement médical. Il y a donc une indication à une évaluation chirurgicale de votre situation.",
+ ];
+ }
+
+ public function index(Request $request) {
+
+ $surgeons = $this->surgeons;
+ $pathologies = $this->pathologies;
+ $editable_message = $this->getEditableMessage('views/diagnosis/message.html');
+ $snippets = $this->snippets;
+ $dr = $request->get('dr');
+ $pathology = $request->get('pathology');
+ $name = $request->get('name');
+ $email = $request->get('email');
+ $message = $request->get('message');
+ $action = $request->get('action');
+
+ if ($dr && $pathology && $name && $email && $message) {
+
+ $message_html = $this->renderQuill($message);
+
+ $message_html = $this->replaceTokens($message_html, [
+ 'NOM' => $name,
+ 'DOCTEUR' => $dr,
+ 'DOCTEUR_LIEN' => $this->surgeons[$dr]['profile'],
+ 'PATHOLOGIE' => $pathology,
+ 'PATHOLOGIE_LIEN' => $this->pathologies[$pathology],
+ ]);
+
+ // Data used by views and mailable object
+ $data = compact('dr', 'pathology', 'name', 'email', 'message_html', 'surgeons', 'pathologies');
+
+ if ($action === 'send') {
+
+ try {
+ Mail::to($email)->send(new Diagnosis($data));
+ return redirect('/diagnosis')->with('message', 'Message envoyé avec succès !');
+
+ } catch (\Swift_TransportException $STe) {
+ $title = "Erreur lors de l'envoi de l'e-mail";
+ $details = $STe->getMessage();
+ return view('error', compact('title', 'details'));
+ }
+ }
+
+ return view('diagnosis.email', ['layout' => 'layouts.preview', 'post_data' => $request->post()] + $data);
+ }
+
+ return view('diagnosis.form', compact('surgeons', 'pathologies', 'editable_message', 'snippets'));
+ }
+}
--- /dev/null
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Mail;
+use App\Mail\Shared;
+
+class EmailDossierIncompleteController extends EmailController
+{
+ public $snippets;
+ public $title;
+
+ public function __construct() {
+
+ $this->title = "Dossier incomplet";
+
+ $this->snippets = [
+
+ "IRM lombaire plus complète" =>
+ "Une IRM lombaire plus complète, idéalement réalisée directement à la clinique du Parc avant votre rdv chirurgical.",
+
+ ];
+ }
+
+ public function index(Request $request) {
+
+ $page_title = $this->title;
+ $editable_message = $this->getEditableMessage('views/dossier-incomplete/message.html', false);
+ $snippets = $this->snippets;
+ $name = $request->get('name');
+ $email = $request->get('email');
+ $message = $request->get('message');
+ $action = $request->get('action');
+
+ if ($name && $email && $message) {
+
+ $message_html = $this->renderQuill($message);
+
+ $message_html = $this->replaceTokens($message_html, [
+ 'NOM' => $name,
+ ]);
+
+ // Data used by views and mailable object
+ $data = compact('name', 'email', 'message_html');
+
+ if ($action === 'send') {
+
+ try {
+ Mail::to($email)->send(new Shared($data));
+ return redirect('/dossier-incomplete')->with('message', 'Message envoyé avec succès !');
+
+ } catch (\Swift_TransportException $STe) {
+ $title = "Erreur lors de l'envoi de l'e-mail";
+ $details = $STe->getMessage();
+ return view('error', compact('title', 'details'));
+ }
+ }
+
+ return view('shared.email', ['layout' => 'layouts.preview', 'post_data' => $request->post()] + $data);
+ }
+
+ return view('shared.form', compact('page_title', 'editable_message', 'snippets'));
+ }
+}
--- /dev/null
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Mail;
+use App\Mail\Shared;
+
+class EmailMissingImageryController extends EmailController
+{
+ public $snippets;
+ public $title;
+
+ public function __construct() {
+
+ $this->title = "Bug transfert d’imagerie";
+
+ $this->snippets = [
+
+ "Sans imagerie" =>
+ "Sans imagerie nous ne pouvons malheureusement pas étudier votre dossier. Peut-être pourriez-vous essayer de remplir à nouveau un formulaire en transférant vos images depuis le CD ou en nous communiquant éventuellement un lien pour visualiser votre imagerie en ligne. Vous pouvez également prendre contact auprès de notre secrétariat pour obtenir de l’aide dans vos démarches.",
+
+ "Lien internet incorrect" =>
+ "Le lien internet vers le site d’imagerie médicale en ligne que vous nous avez fourni pour consulter votre imagerie semble incorrect et ne nous a pas permis de visualiser les images.<br><br>Pourriez-vous vérifier vos informations et soumettre à nouveau votre formulaire de demande de diagnostic ? Vous pouvez également vous rapprocher de votre cabinet de radiologie pour corriger une éventuelle erreur.",
+
+ "Compte rendu sans images" =>
+ "Le lien internet que vous nous avez fourni permet uniquement de consulter votre compte-rendu et ne permet pas de visualiser les images. Veuillez vous rapprocher de votre cabinet de radiologie pour obtenir les codes permettant de visualiser ces images et nous soumettre à nouveau votre formulaire.",
+
+ "Identifiants incorrects" =>
+ "Les mots de passe et identifiant que vous nous avez fourni pour consulter votre imagerie semblent incorrects et ne nous ont pas permis de visualiser vos examens.<br><br>Pourriez-vous vérifier vos informations et soumettre à nouveau votre formulaire de demande de diagnostic ? Vous pouvez également vous rapprocher de votre cabinet de radiologie pour corriger une éventuelle erreur.",
+
+ "Échec transfert mobile" =>
+ "Le transfert de vos images à partir de votre mobile n’a pas fonctionné. Peut-être pourriez-vous essayer de remplir à nouveau un formulaire en transférant vos images depuis le CD ou en nous communiquant éventuellement un lien pour visualiser votre imagerie en ligne, ou à défaut transférer vos images en retour ce cet email. Vous pouvez également prendre contact auprès de notre secrétariat pour obtenir de l’aide dans vos démarches.",
+
+ "Échec transfert CD" =>
+ "Le transfert de vos images à partir de votre CD d'imagerie n’a pas fonctionné. Peut-être pourriez-vous essayer de remplir à nouveau un formulaire ou de prendre contact avec notre secrétariat pour obtenir de l’aide dans vos démarches.",
+ ];
+ }
+
+ public function index(Request $request) {
+
+ $page_title = $this->title;
+ $editable_message = $this->getEditableMessage('views/missing-imagery/message.html');
+ $snippets = $this->snippets;
+ $name = $request->get('name');
+ $email = $request->get('email');
+ $message = $request->get('message');
+ $action = $request->get('action');
+
+ if ($name && $email && $message) {
+
+ $message_html = $this->renderQuill($message);
+
+ $message_html = $this->replaceTokens($message_html, [
+ 'NOM' => $name,
+ ]);
+
+ // Data used by views and mailable object
+ $data = compact('name', 'email', 'message_html');
+
+ if ($action === 'send') {
+
+ try {
+ Mail::to($email)->send(new Shared($data));
+ return redirect('/missing-imagery')->with('message', 'Message envoyé avec succès !');
+
+ } catch (\Swift_TransportException $STe) {
+ $title = "Erreur lors de l'envoi de l'e-mail";
+ $details = $STe->getMessage();
+ return view('error', compact('title', 'details'));
+ }
+ }
+
+ return view('shared.email', ['layout' => 'layouts.preview', 'post_data' => $request->post()] + $data);
+ }
+
+ return view('shared.form', compact('page_title', 'editable_message', 'snippets'));
+ }
+}
*/
public function build()
{
- $subject = 'Votre E-Diagnostic';
+ $subject = 'Votre E-diagnostic - CCV Montpellier';
return $this->view('diagnosis.email')
- ->subject($subject)->with([
- 'dr' => $this->data['dr'],
- 'pathology' => $this->data['pathology'],
- 'name' => $this->data['name'],
- 'email' => $this->data['email'],
- 'surgeons' => $this->data['surgeons'],
- 'pathologies' => $this->data['pathologies']
- ]);
+ ->with([
+ 'dr' => $this->data['dr'],
+ 'pathology' => $this->data['pathology'],
+ 'name' => $this->data['name'],
+ 'email' => $this->data['email'],
+ 'surgeons' => $this->data['surgeons'],
+ 'pathologies' => $this->data['pathologies'],
+ 'message_html' => $this->data['message_html'],
+ // NOTE: can't use view variable named $message because it causes an exception
+ // See: https://stackoverflow.com/a/46605365
+ ])
+ ->subject($subject);
}
}
--- /dev/null
+<?php
+
+namespace App\Mail;
+
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Mail\Mailable;
+use Illuminate\Queue\SerializesModels;
+
+class Shared extends Mailable
+{
+ use Queueable, SerializesModels;
+
+ public $data;
+
+ /**
+ * Create a new message instance.
+ *
+ * @return void
+ */
+ public function __construct($data)
+ {
+ $this->data = $data;
+ }
+
+ /**
+ * Build the message.
+ *
+ * @return $this
+ */
+ public function build()
+ {
+ $subject = 'Votre E-diagnostic - CCV Montpellier';
+
+ return $this->view('shared.email')
+ ->with([
+ 'name' => $this->data['name'],
+ 'email' => $this->data['email'],
+ 'message_html' => $this->data['message_html'],
+ // NOTE: can't use view variable named $message because it causes an exception
+ // See: https://stackoverflow.com/a/46605365
+ ])
+ ->subject($subject);
+ }
+}
"license": "MIT",
"require": {
"php": "^7.3|^8.0",
+ "deanblackborough/php-quill-renderer": "^3.18",
"fideloper/proxy": "^4.4",
"fruitcake/laravel-cors": "^2.0",
"guzzlehttp/guzzle": "^7.0.1",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "cb237b1fa6422b85262f95e568ec5de5",
+ "content-hash": "84ad18c202f157faf15ff67ab59bcab6",
"packages": [
{
"name": "asm89/stack-cors",
],
"time": "2021-01-20T22:51:39+00:00"
},
+ {
+ "name": "deanblackborough/php-quill-renderer",
+ "version": "v3.18.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/deanblackborough/php-quill-renderer.git",
+ "reference": "11d3c7c0105a09ca007fc51925373ef5da168a9d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/deanblackborough/php-quill-renderer/zipball/11d3c7c0105a09ca007fc51925373ef5da168a9d",
+ "reference": "11d3c7c0105a09ca007fc51925373ef5da168a9d",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "php": "^7.1"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2",
+ "phpunit/phpunit": "^7"
+ },
+ "suggest": {
+ "php": "^7.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "DBlackborough\\Quill\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Dean Blackborough",
+ "email": "dean@g3d-development.com"
+ }
+ ],
+ "description": "Render quill insert deltas to HTML, Markdown and GitHub flavoured Markdown",
+ "homepage": "http://www.transmute-coffee.com/php-quill-renderer.php",
+ "keywords": [
+ "delta",
+ "html",
+ "markdown",
+ "parse",
+ "php",
+ "quill",
+ "quilljs",
+ "renderer"
+ ],
+ "support": {
+ "issues": "https://github.com/deanblackborough/php-quill-renderer/issues",
+ "source": "https://github.com/deanblackborough/php-quill-renderer/tree/v3.18.1"
+ },
+ "time": "2019-12-10T22:44:21+00:00"
+ },
{
"name": "dnoegel/php-xdg-base-dir",
"version": "v0.1.1",
--- /dev/null
+{{-- Quill JS Editor --}}
+
+@props([
+ 'field_name' => 'message',
+ 'snippets' => [],
+])
+
+<div class="w-full mt-2 bg-white" id="{{ $field_name }}">{{ $slot }}</div>
+<textarea name="{{ $field_name }}" class="hidden">{{-- Populated by form submit listener + used to repopulate editor. Can't have any whitespace here --}}</textarea>
+
+@push('head')
+ <link href="https://cdn.quilljs.com/1.3.6/quill.snow.css" rel="stylesheet">
+ <style>
+ .ql-toolbar.ql-snow {
+ background-color: #d9dde0;
+ }
+
+ .ql-snow .ql-picker.ql-expanded .ql-picker-label::before {
+ color: #777;
+ }
+
+ .ql-snow.ql-toolbar button:hover, .ql-snow .ql-toolbar button:hover, .ql-snow.ql-toolbar button:focus, .ql-snow .ql-toolbar button:focus, .ql-snow.ql-toolbar button.ql-active, .ql-snow .ql-toolbar button.ql-active, .ql-snow.ql-toolbar .ql-picker-label:hover, .ql-snow .ql-toolbar .ql-picker-label:hover, .ql-snow.ql-toolbar .ql-picker-label.ql-active, .ql-snow .ql-toolbar .ql-picker-label.ql-active, .ql-snow.ql-toolbar .ql-picker-item:hover, .ql-snow .ql-toolbar .ql-picker-item:hover, .ql-snow.ql-toolbar .ql-picker-item.ql-selected, .ql-snow .ql-toolbar .ql-picker-item.ql-selected {
+ color: #ff078b;
+ }
+
+ .ql-snow.ql-toolbar button:hover .ql-stroke, .ql-snow .ql-toolbar button:hover .ql-stroke, .ql-snow.ql-toolbar button:focus .ql-stroke, .ql-snow .ql-toolbar button:focus .ql-stroke, .ql-snow.ql-toolbar button.ql-active .ql-stroke, .ql-snow .ql-toolbar button.ql-active .ql-stroke, .ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke, .ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke, .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke, .ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke, .ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke, .ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke, .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke, .ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke, .ql-snow.ql-toolbar button:hover .ql-stroke-miter, .ql-snow .ql-toolbar button:hover .ql-stroke-miter, .ql-snow.ql-toolbar button:focus .ql-stroke-miter, .ql-snow .ql-toolbar button:focus .ql-stroke-miter, .ql-snow.ql-toolbar button.ql-active .ql-stroke-miter, .ql-snow .ql-toolbar button.ql-active .ql-stroke-miter, .ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke-miter, .ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke-miter, .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter, .ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter, .ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke-miter, .ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke-miter, .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter, .ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter {
+ stroke: #ff078b;
+ }
+
+ .ql-editor a, .ql-snow a {
+ color: #ff078b;
+ }
+ </style>
+@endpush
+
+@push('scripts')
+ <script src="https://cdn.quilljs.com/1.3.6/quill.js"></script>
+ {{-- Quill Toolbar library: https://github.com/T-vK/DynamicQuillTools --}}
+ <script src="https://cdn.jsdelivr.net/gh/T-vK/DynamicQuillTools@master/DynamicQuillTools.js"></script>
+ <script>
+
+ let quill = new Quill('#message', {
+ theme: 'snow',
+ modules: {
+ toolbar: [['bold', 'italic', 'underline'], ['link']]
+ }
+ });
+
+ // Quill would normally reset any changes in the editor after going to the preview and then returning
+ // via the back button. However, we can re-use the saved JSON that is set when submitting the form to
+ // repopulate the editor.
+ setTimeout(function() {
+ let backup = document.querySelector('textarea[name={{ $field_name }}]');
+ if (backup && backup.value !== '') {
+ quill.setContents(JSON.parse(backup.value));
+ }
+ }, 10);
+
+ const snippets = {
+ @foreach ($snippets as $title => $value)
+ '{{ $title }}': "{!! $value !!}",
+ @endforeach
+ };
+
+ const snippetsDropDown = new QuillToolbarDropDown({
+ label: "+ Ajouter un texte prédéfini",
+ rememberSelection: false
+ });
+
+ snippetsDropDown.setItems(snippets);
+
+ snippetsDropDown.onSelect = function(label, value, quill) {
+
+ const selection = quill.selection.savedRange;
+
+ // TODO: improve the insertion of snippets so they have a good amount of space around them
+ let html = (selection.index === 0) ? `${value}<br /><br /><br />` : `<br />${value}<br /><br />`;
+
+ quill.deleteText(selection.index, selection.length); // Replace any highlighted text
+ console.log('res', quill.clipboard.dangerouslyPasteHTML(selection.index, html));
+ quill.setSelection(selection.index + value.length + 1)
+ };
+
+ snippetsDropDown.attach(quill);
+
+ //=== Handle form submit and get Quill data
+ let form = document.querySelector('form');
+ form.onsubmit = function() {
+ // Populate hidden message field with Quill data
+ let message = document.querySelector('textarea[name={{ $field_name }}]');
+ message.value = JSON.stringify(quill.getContents());
+
+ return true;
+ }
+
+ </script>
+@endpush
--- /dev/null
+{{-- Trim whitespace around input --}}
+@php
+ $lines = explode(PHP_EOL, $slot);
+ $lines = array_map('trim', $lines);
+@endphp
+
+{{ implode(PHP_EOL, $lines) }}
--- /dev/null
+Bonjour {{ NOM }},
+
+Merci d’avoir sollicité le CCV Montpellier pour obtenir votre E-Diagnostic sur vos problèmes de dos. Vous exprimez ainsi votre confiance dans l’avis de nos spécialistes, et nous vous en sommes reconnaissants.
+
+Le formulaire que vous avez rempli ainsi que la visualisation de votre imagerie médicale, nous a permis d’évaluer la sévérité de vos symptômes, le degré de gravité de vos lésions et la qualité de votre parcours de soins, indispensable avant toute décision chirurgicale.
+
+Conformément aux informations que vous nous avez transmis, il ressort de votre dossier qu’il n’y a pas lieu d’envisager pour le moment une consultation chirurgicale avec nos spécialistes du CCV.
+
+<strong>Votre parcours de soin n’est pas complet, car vous n’avez pas encore effectué de kinésithérapie, indispensable avant de prendre un avis chirurgical pour un problème de lombalgie.</strong>
+
+Cette étude préliminaire gratuite a pour but de faire éviter le déplacement et le coût d’une consultation inutile à des personnes dont les conditions sont manifestement trop loin d’être réunies, pour qu’une discussion sur une éventuelle intervention chirurgicale soit justifiée.
+
+L’avis médical qui vous est ainsi rendu, ne constitue pas un acte médical et ne peut donc se substituer à une véritable consultation médicale.
+
+Nous vous conseillons vivement de faire réévaluer vos symptômes par votre médecin traitant, qui pourra préciser son diagnostic sur votre pathologie au terme de son examen et, le cas échéant, soit vous prescrire des soins plus adaptés, soit requérir tout de même un avis spécialiste.
+
+Si cette demande d’avis spécialisée est prescrite par lui, vous pourrez bien sûr, munie de son courrier, prendre rendez-vous avec un de nos chirurgiens, soit par téléphone, soit par internet en suivant directement ce lien : <a href="https://www.doctolib.fr/cabinet-medical/castelnau-le-lez/ccv-montpellier" target="_blank">Rendez-vous au CCV</a>
+
+Nous restons biensur à votre disposition si votre pathologie évolue dans l’avenir. N’hésitez pas alors, à nous solliciter à nouveau.
@extends($layout ?? 'layouts.email-wrapper')
-@push('head')
- <style>
- body {
- font-family: sans-serif;
- }
- a {
- color: #ff078b;
- text-decoration: underline;
- }
-
- img {
- display: inline;
- }
-
- .text-sm {
- font-size: 13px;
- }
-
- .text-xs {
- font-size: 10px;
- }
- </style>
-@endpush
-
@section('content')
@parent
- {{-- HEADER --}}
- <table role="presentation" width="100%">
- <tr>
- <td style="padding:10px 10px 20px 10px;text-align:center;">
- <a href="https://www.ccv-montpellier.fr/">
- <img src="{{ url('assets/CCV_logo.png') }}" alt="CCV Montpellier" width="200" style="max-width:200px;width:100%;height:auto;" />
- </a>
- <x-spacer height="32px" />
- <img src="{{ url('assets/CCV_slogan.png') }}" alt="Trouvons ensemble la solution chirurgicale à votre problème de dos" width="540" style="max-width:540px;width:100%;height:auto;" />
- <br><br>
-
- <x-divider />
- </td>
- </tr>
- </table>
-
{{-- Body Intro --}}
<table role="presentation" width="100%">
<tr>
- <td class="text-sm" style="padding:10px 10px 20px 10px;">
- Bonjour {{ $name }},<br>
- <br>
- Merci d’avoir sollicité le CCV Montpellier pour obtenir votre E-Diagnostic sur vos problèmes de dos.<br>
- <br>
- Vous exprimez ainsi votre confiance dans l’avis de nos spécialistes, et nous vous en sommes reconnaissants.<br>
- <br>
- L’étude préliminaire de vos informations médicales par l’équipe du CCV Montpellier, a permis de diagnostiquer une pathologie
- de <b>{{ $pathology }}</b> qui pourrait être prise en charge par un de nos spécialistes.<br>
- <br>
- Vous trouverez <a href="{{ $pathologies[$pathology] }}">ici</a>, une fiche résumant cette pathologie et les possibilités de traitements.<br>
- <br>
- Le Docteur <a href="{{ $surgeons[$dr]['profile'] }}">{{ $dr }}</a> chirurgien spécialisé dans la pathologie vertébrale, pourra vous recevoir en consultation pour une étude complète de votre dossier.<br>
- <br>
- Pour prendre rendez-vous, veuillez choisir votre mode de consultation :
+ <td class="quill text-sm" style="padding:10px 10px 20px 10px;">
+ {!! $message_html !!}
</td>
</tr>
</table>
</x-columns>
- <table role="presentation" width="100%">
- <tr>
- <td class="text-sm" style="padding:10px 10px 20px 10px;">
- Bien cordialement,
- <br><br>
- <b>L’équipe du CCV MONTPELLIER</b>
- </td>
- </tr>
- </table>
-
- <x-divider />
- <x-spacer height="30px" />
-
- {{-- Social icons --}}
- <table role="presentation" width="100%">
- <tr>
- <td align="center">
- <table width="100%" border="0" style="max-width:490px">
- <tr>
- <td width="33%" valign="middle" align="center"><a href="https://www.instagram.com/ccv_montpellier/"><img src="{{ url('assets/instagram.png') }}" alt="Instagram CCV" moz-do-not-send="true" width="27" vspace="0" hspace="0" height="27" border="0" align="middle"></a></td>
- <td width="33%" valign="middle" align="center"><a href="https://www.youtube.com/channel/UC3DJtYRhJ-WJo165H3TyjKQ"><img src="{{ url('assets/youtube.png') }}" alt="YouTube CCV" moz-do-not-send="true" width="37" vspace="0" hspace="0" height="26" border="0" align="middle"></a></td>
- <td width="33%" valign="middle" align="center"><a href="http://www.sosdos-montpellier.fr/"><img src="{{ url('assets/SOS_DOS.png') }}" alt="SOS DOS" moz-do-not-send="true" width="47" vspace="0" hspace="0" height="28" border="0" align="middle"></a></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
-
- <x-spacer height="30px" />
- <x-divider />
- <x-spacer height="20px" />
-
- <div style="font-size:13px;text-align:center;">
- <a href="https://goo.gl/maps/xsQwUZt35rPTtqaFA" style="color:#2e2c40;text-decoration: underline;">
- Clinique du Parc<br>
- 50 Rue Emile Combes<br>
- 34170 Castelnau-le-Lez
- </a>
- <br><br>
- <a href="tel:0467331363" style="color:#2e2c40;text-decoration: underline;">
- 04 67 33 13 63
- </a>
- <br><br>
- <a href="mailto:ccv@ccv-montpellier.fr" style="color:#2e2c40;text-decoration: underline;">
- ccv@ccv-montpellier.fr
- </a>
- </div>
-
- <x-spacer height="20px" />
- <x-divider />
- <x-spacer height="40px" />
-
- {{-- Tarifs --}}
- <table width="100%" cellspacing="0" cellpadding="20" border="0" bgcolor="#f6f5f5" align="center">
- <tr>
- <td>
- <h3 style="font-size: 19px;margin: 0 0 1em 0;">Tarifs des consultations du CCV MONTPELLIER</h3>
- <table width="100%" cellspacing="0" cellpadding="15" border="0" align="center" class="text-sm">
- <tbody>
- <tr>
- <td width="85%" valign="middle" bgcolor="#ffffff"><b>Étude préliminaire de votre dossier</b> (Demande d'avis médical en ligne) :<br></td>
- <td valign="middle" bgcolor="#ffffff" align="right"><b>Gratuit</b><br></td>
- </tr>
- <tr>
- <td width="85%" valign="middle" align="left"><b>Consultation médicale au CCV (Clinique du Parc) :</b><br><span class="text-xs">(Base de Remboursement SS : 50€ pour un avis spécialiste ponctuel , 23€ pour une consultation de suivi. Prise en charge mutuelle pour le reste à charge).</span><br></td>
- <td valign="middle" align="right"><b>80€</b><br></td>
- </tr>
- <tr>
- <td width="85%" valign="middle" bgcolor="#ffffff" align="left"><b>Téléconsultation médicale en ligne (Vidéo consultation) :</b><br><span class="text-xs">Incluant une étude approfondie de votre dossier et la rédaction d’un rapport médical (Base de Remboursement SS : 50€ pour un avis spécialiste ponctuel. Prise en charge mutuelle pour le reste à charge).</span><br></td>
- <td valign="middle" bgcolor="#ffffff" align="right"><b>100€</b><br></td>
- </tr>
- <tr>
- <td width="85%" valign="middle"><b>Séjour médical personnalisé :</b><br><span class="text-xs">Incluant frais d’hospitalisation, transport, hébergement et prestations personnalisées à la clinique.</span><br></td>
- <td valign="middle" align="right"><b>Sur devis</b><br></td>
- </tr>
- <tr>
- <td width="85%" valign="middle" bgcolor="#ffffff"><b>Interventions pour patients français</b><br><span class="text-xs">Pour les patients français affiliés à la Sécurité Sociale, seuls les dépassements d’honoraires seront à régler. Leurs montants vous seront communiqués sur simple demande.</span><br></td>
- <td valign="middle" bgcolor="#ffffff" align="right"><b>Sur devis</b><br></td>
- </tr>
- </tbody>
- </table>
- </td>
- </tr>
- <tr>
- <td>
- <h3 style="font-size: 19px;margin: 0 0 1em 0;"><b>Vous ne connaissez pas encore le service ma E-Consultation du CCV MONTPELLIER ?</b></h3>
- <div class="text-sm">
- La téléconsultation vidéo vous permet d’expliquer en détail votre histoire médicale, de préciser vos symptômes et vos attentes dans la prise en charge de votre pathologie. Toutes vos questions pourront être abordées pendant cet entretien.<br>Les échanges avec votre chirurgien lui permettront de préciser son diagnostic, de vous expliquer l’origine de vos douleurs et de vous détailler un programme de soins, avec ses bénéfices, ses risques, ses taux de réussite et ses échecs.
- <br>
- <br>
- Ce programme de soins ne conduira pas systématiquement à une proposition de chirurgie, puisque l’intervention reste le dernier recours dans la plupart des pathologies du dos.
- <br>
- <br>Si toutefois, une chirurgie devait être réalisée au CCV MONTPELLIER, notre plateforme e-medecine pourra se charger de l’organisation complète de votre voyage médical. <a href="https://www.ccv-montpellier.fr/notre-offre-de-voyage-medical/">En savoir plus</a> <br>
- <br>
- Besoin d’aide ? D’information complémentaire ? Nos secrétaires médicales se feront un plaisir d’échanger avec vous du lundi au vendredi de 9h00 à 18h00. <a moz-do-not-send="true" href="https://www.ccv-montpellier.fr/contact/">Pour être rappelé par le secrétariat médical du CCV Montpellier, cliquez-ici.</a>
- </div>
- </td>
- </tr>
- </table>
-
@endsection
@section('content')
- <h1 class="text-xl font-bold mb-4">E-mail de diagnostic</h1>
+ <a href="/"><img src="/assets/CCV_logo.png" alt="CCV Montpellier"></a>
+
+ <h1 class="text-xl font-bold my-4">E-mail de diagnostic</h1>
@if (session('message'))
<div class="py-2 px-6 border mb-6 bg-green-100 border-green-400 rounded">
</div>
@endif
- <form action="{{ $_SERVER['REQUEST_URI'] }}" method="post" class="max-w-xl mx-6 sm:mx-auto p-6 bg-gray-200 rounded-lg">
+ <form action="{{ $_SERVER['REQUEST_URI'] }}" method="post" class="max-w-3xl mx-6 sm:mx-auto p-6 bg-gray-200 rounded-lg">
@csrf
</div>
+ <label class="mt-6 mb-2 block text-grey-darker text-sm font-bold" for="message">
+ Message
+ </label>
+
+ <x-quill :snippets="$snippets">{!! $editable_message !!}</x-quill>
+
<input type="submit" value="Aperçu →" class="block mt-6 ml-auto bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-8 rounded cursor-pointer">
</form>
--- /dev/null
+Bonjour {{ NOM }},
+
+Merci d’avoir sollicité le CCV Montpellier pour obtenir votre E-Diagnostic sur vos problèmes de dos.
+
+Vous exprimez ainsi votre confiance dans l’avis de nos spécialistes, et nous vous en sommes reconnaissants.
+
+L’étude préliminaire de vos informations médicales par l’équipe du CCV Montpellier, a permis de diagnostiquer une pathologie de <b>{{ PATHOLOGIE }}</b> qui pourrait être prise en charge par un de nos spécialistes.
+
+Vous trouverez <a href="{{ PATHOLOGIE_LIEN }}">ici</a>, une fiche résumant cette pathologie et les possibilités de traitements.
+
+Le Docteur <a href="{{ DOCTEUR_LIEN }}">{{ DOCTEUR }}</a> chirurgien spécialisé dans la pathologie vertébrale, pourra vous recevoir en consultation pour une étude complète de votre dossier.
+
+Pour prendre rendez-vous, veuillez choisir votre mode de consultation :
--- /dev/null
+Bonjour {{ NOM }},
+
+<br><br>Merci d’avoir sollicité le CCV Montpellier pour l’étude préliminaire de votre dossier médical et d’avoir exprimé ainsi votre confiance dans l’avis de nos spécialistes.
+
+<br><br>Votre dossier est malheureusement incomplet et votre chirurgien requiert un complément d’information pour porter son diagnostic.
+
+<br><br>Voici, le complément de bilan préconisé par nos spécialistes et indispensable à l’étude de votre cas :
+
+<br><br><ul>
+ <li><strong>Une IRM lombaire
</strong></li>
+ <li><strong>Une IRM cervicale
</strong></li>
+ <li><strong>Un scanner lombaire
</strong></li>
+ <li><strong>Un scanner cervical</strong></li>
+ <li><strong>Des radiographies du rachis lombaire
</strong></li>
+ <li><strong>Des radiographies du rachis cervical
</strong></li>
+ <li><strong>Des radiographies du rachis en totalité</strong></li>
+</ul>
+
+<br>Vous pouvez prendre avis auprès de votre médecin traitant pour évaluer la pertinence du complément d’imagerie ainsi préconisée par nos spécialistes, et lui en demander la prescription.
+
+<br><br>Si vous souhaitez faire vos examens directement à la clinique du Parc, vous pouvez également prendre contact auprès de notre secrétariat, afin qu’il fasse la prescription de l’imagerie préconisée dans cet email et organise le rendez-vous de radiologie et celui avec votre chirurgien dans la foulée.
+
+<br><br>L’avis médical qui vous est ainsi rendu, ne constitue pas un acte médical et ne peut donc se substituer à une véritable consultation médicale.
+
+<br><br>Besoin d’aide ? D’information complémentaire ? Nos secrétaires médicales se feront un plaisir d’échanger avec vous du lundi au vendredi de 9h00 à 18h00. <a href="https://www.ccv-montpellier.fr/contact/" target="_blank">Pour être rappelé par le secrétariat médical du CCV Montpellier, cliquez-ici</a>.
--- /dev/null
+@extends('layouts.app')
+
+@push('head')
+ <style>
+ a {
+ color: #fff;
+ opacity: 0.7;
+ }
+ a:hover {
+ color: #71d3df;
+ opacity: 1;
+ }
+ </style>
+@endpush
+
+@section('content')
+
+ <img src="/assets/CCV_logo.png" alt="CCV Montpellier">
+
+ <h1 class="text-xl font-bold my-6">Choisissez un modèle de réponse</h1>
+
+ <div class="mx-6 sm:mx-auto py-8 px-10 sm:px-20 text-gray-400 rounded-lg text-lg sm:text-2xl" style="background: #2e2c40">
+ <ol class="list-decimal leading-loose">
+ <li><a class="ml-3" href="/missing-imagery">Bug transfert d’imagerie</a></li>
+ <li><a class="ml-3" href="/dossier-incomplete">Dossier incomplet</a></li>
+ <li><a class="ml-3" href="/diagnosis">Réponse positive</a></li>
+ <li><a class="ml-3" href="/consultation-unnecessary">Consultation inutile</a></li>
+ </ol>
+ <div>
+
+@endsection
<link href="https://unpkg.com/@tailwindcss/forms/dist/forms.min.css" rel="stylesheet">
@stack('head')
</head>
-<body class="min-h-screen flex flex-col justify-center items-center">
+<body class="min-h-screen flex flex-col justify-center items-center py-6">
@yield('content')
+ @stack('scripts')
</body>
</html>
</xml>
</noscript>
<![endif]-->
+
@stack('head')
+
+ <style>
+ body {
+ font-family: sans-serif;
+ }
+ a {
+ color: #ff078b;
+ text-decoration: underline;
+ }
+
+ img {
+ display: inline;
+ }
+
+ .text-sm {
+ font-size: 13px;
+ }
+
+ .text-xs {
+ font-size: 10px;
+ }
+
+ .quill p:not(:last-child) {
+ margin-bottom: 1.5em;
+ }
+ </style>
+
</head>
<body style="margin:0;padding:0;word-spacing:normal;background-color:#ffffff;">
<![endif]-->
<div class="outer" style="width:96%;max-width:700px;margin:20px auto;">
+ @include('shared/email-header')
@yield('content')
+ @include('shared/email-footer')
</div>
<!--[if mso]>
--- /dev/null
+Bonjour {{ NOM }},
+
+Merci d’avoir sollicité le CCV Montpellier pour l’étude préliminaire de votre dossier médical et d’avoir exprimé ainsi votre confiance dans l’avis de nos spécialistes.
+
+Votre dossier est malheureusement incomplet et votre chirurgien requiert un complément d’information pour porter son diagnostic.
+
+<strong><em>
Le lien internet vers le site d’imagerie médicale en ligne que vous nous avez fourni pour consulter votre imagerie, semble incorrect et ne nous ont pas permis de visualiser les images.</em></strong>
+
+<strong><em>Pourriez-vous vérifier vos informations et soumettre à nouveau votre formulaire de demande de diagnostic ? Vous pouvez également vous rapprocher de votre cabinet de radiologie pour corriger une éventuelle erreur.
</em></strong>
+
+Besoin d’aide ? D’information complémentaire ? Nos secrétaires médicales se feront un plaisir d’échanger avec vous du lundi au vendredi de 9h00 à 18h00. <a href="https://www.ccv-montpellier.fr/contact/" target="_blank">Pour être rappelé par le secrétariat médical du CCV Montpellier, cliquez-ici
</a>
.
--- /dev/null
+{{-- Sign off --}}
+<table role="presentation" width="100%">
+ <tr>
+ <td class="text-sm" style="padding:10px 10px 20px 10px;">
+ Bien cordialement,
+ <br><br>
+ <b>L’équipe du CCV MONTPELLIER</b>
+ </td>
+ </tr>
+</table>
+
+<x-divider />
+<x-spacer height="30px" />
+
+{{-- Social icons --}}
+<table role="presentation" width="100%">
+ <tr>
+ <td align="center">
+ <table width="100%" border="0" style="max-width:490px">
+ <tr>
+ <td width="33%" valign="middle" align="center"><a href="https://www.instagram.com/ccv_montpellier/"><img src="{{ url('assets/instagram.png') }}" alt="Instagram CCV" moz-do-not-send="true" width="27" vspace="0" hspace="0" height="27" border="0" align="middle"></a></td>
+ <td width="33%" valign="middle" align="center"><a href="https://www.youtube.com/channel/UC3DJtYRhJ-WJo165H3TyjKQ"><img src="{{ url('assets/youtube.png') }}" alt="YouTube CCV" moz-do-not-send="true" width="37" vspace="0" hspace="0" height="26" border="0" align="middle"></a></td>
+ <td width="33%" valign="middle" align="center"><a href="http://www.sosdos-montpellier.fr/"><img src="{{ url('assets/SOS_DOS.png') }}" alt="SOS DOS" moz-do-not-send="true" width="47" vspace="0" hspace="0" height="28" border="0" align="middle"></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+
+<x-spacer height="30px" />
+<x-divider />
+<x-spacer height="20px" />
+
+<div style="font-size:13px;text-align:center;">
+ <a href="https://goo.gl/maps/xsQwUZt35rPTtqaFA" style="color:#2e2c40;text-decoration: underline;">
+ Clinique du Parc<br>
+ 50 Rue Emile Combes<br>
+ 34170 Castelnau-le-Lez
+ </a>
+ <br><br>
+ <a href="tel:0467331363" style="color:#2e2c40;text-decoration: underline;">
+ 04 67 33 13 63
+ </a>
+ <br><br>
+ <a href="mailto:ccv@ccv-montpellier.fr" style="color:#2e2c40;text-decoration: underline;">
+ ccv@ccv-montpellier.fr
+ </a>
+</div>
+
+<x-spacer height="20px" />
+<x-divider />
+<x-spacer height="40px" />
+
+{{-- Tarifs --}}
+<table width="100%" cellspacing="0" cellpadding="20" border="0" bgcolor="#f6f5f5" align="center">
+ <tr>
+ <td>
+ <h3 style="font-size: 19px;margin: 0 0 1em 0;">Tarifs des consultations du CCV MONTPELLIER</h3>
+ <table width="100%" cellspacing="0" cellpadding="15" border="0" align="center" class="text-sm">
+ <tbody>
+ <tr>
+ <td width="85%" valign="middle" bgcolor="#ffffff"><b>Étude préliminaire de votre dossier</b> (Demande d'avis médical en ligne) :<br></td>
+ <td valign="middle" bgcolor="#ffffff" align="right"><b>Gratuit</b><br></td>
+ </tr>
+ <tr>
+ <td width="85%" valign="middle" align="left"><b>Consultation médicale au CCV (Clinique du Parc) :</b><br><span class="text-xs">(Base de Remboursement SS : 50€ pour un avis spécialiste ponctuel , 23€ pour une consultation de suivi. Prise en charge mutuelle pour le reste à charge).</span><br></td>
+ <td valign="middle" align="right"><b>80€</b><br></td>
+ </tr>
+ <tr>
+ <td width="85%" valign="middle" bgcolor="#ffffff" align="left"><b>Téléconsultation médicale en ligne (Vidéo consultation) :</b><br><span class="text-xs">Incluant une étude approfondie de votre dossier et la rédaction d’un rapport médical (Base de Remboursement SS : 50€ pour un avis spécialiste ponctuel. Prise en charge mutuelle pour le reste à charge).</span><br></td>
+ <td valign="middle" bgcolor="#ffffff" align="right"><b>100€</b><br></td>
+ </tr>
+ <tr>
+ <td width="85%" valign="middle"><b>Séjour médical personnalisé :</b><br><span class="text-xs">Incluant frais d’hospitalisation, transport, hébergement et prestations personnalisées à la clinique.</span><br></td>
+ <td valign="middle" align="right"><b>Sur devis</b><br></td>
+ </tr>
+ <tr>
+ <td width="85%" valign="middle" bgcolor="#ffffff"><b>Interventions pour patients français</b><br><span class="text-xs">Pour les patients français affiliés à la Sécurité Sociale, seuls les dépassements d’honoraires seront à régler. Leurs montants vous seront communiqués sur simple demande.</span><br></td>
+ <td valign="middle" bgcolor="#ffffff" align="right"><b>Sur devis</b><br></td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <h3 style="font-size: 19px;margin: 0 0 1em 0;"><b>Vous ne connaissez pas encore le service ma E-Consultation du CCV MONTPELLIER ?</b></h3>
+ <div class="text-sm">
+ La téléconsultation vidéo vous permet d’expliquer en détail votre histoire médicale, de préciser vos symptômes et vos attentes dans la prise en charge de votre pathologie. Toutes vos questions pourront être abordées pendant cet entretien.<br>Les échanges avec votre chirurgien lui permettront de préciser son diagnostic, de vous expliquer l’origine de vos douleurs et de vous détailler un programme de soins, avec ses bénéfices, ses risques, ses taux de réussite et ses échecs.
+ <br>
+ <br>
+ Ce programme de soins ne conduira pas systématiquement à une proposition de chirurgie, puisque l’intervention reste le dernier recours dans la plupart des pathologies du dos.
+ <br>
+ <br>Si toutefois, une chirurgie devait être réalisée au CCV MONTPELLIER, notre plateforme e-medecine pourra se charger de l’organisation complète de votre voyage médical. <a href="https://www.ccv-montpellier.fr/notre-offre-de-voyage-medical/">En savoir plus</a> <br>
+ <br>
+ Besoin d’aide ? D’information complémentaire ? Nos secrétaires médicales se feront un plaisir d’échanger avec vous du lundi au vendredi de 9h00 à 18h00. <a moz-do-not-send="true" href="https://www.ccv-montpellier.fr/contact/">Pour être rappelé par le secrétariat médical du CCV Montpellier, cliquez-ici.</a>
+ </div>
+ </td>
+ </tr>
+</table>
--- /dev/null
+{{-- HEADER --}}
+<table role="presentation" width="100%">
+ <tr>
+ <td style="padding:10px 10px 20px 10px;text-align:center;">
+ <a href="https://www.ccv-montpellier.fr/">
+ <img src="{{ url('assets/CCV_logo.png') }}" alt="CCV Montpellier" width="200" style="max-width:200px;width:100%;height:auto;" />
+ </a>
+ <x-spacer height="32px" />
+ <img src="{{ url('assets/CCV_slogan.png') }}" alt="Trouvons ensemble la solution chirurgicale à votre problème de dos" width="540" style="max-width:540px;width:100%;height:auto;" />
+ <br><br>
+
+ <x-divider />
+ </td>
+ </tr>
+</table>
--- /dev/null
+@extends($layout ?? 'layouts.email-wrapper')
+
+@section('content')
+
+ @parent
+
+ {{-- Body Intro --}}
+ <table role="presentation" width="100%">
+ <tr>
+ <td class="quill text-sm" style="padding:10px 10px 20px 10px;">
+ {!! $message_html !!}
+ </td>
+ </tr>
+ </table>
+
+@endsection
--- /dev/null
+@extends('layouts.app')
+
+@section('content')
+
+ <a href="/"><img src="/assets/CCV_logo.png" alt="CCV Montpellier"></a>
+
+ <h1 class="text-xl font-bold my-6">{{ $page_title }}</h1>
+
+ @if (session('message'))
+ <div class="py-2 px-6 border mb-6 bg-green-100 border-green-400 rounded">
+ {{ session('message') }}
+ </div>
+ @endif
+
+ <form action="{{ $_SERVER['REQUEST_URI'] }}" method="post" class="max-w-3xl mx-6 sm:mx-auto p-6 bg-gray-200 rounded-lg">
+
+ @csrf
+
+ <div class="grid grid-cols-1 sm:grid-cols-2 gap-6">
+
+ <label class="block text-grey-darker text-sm font-bold" for="name">
+ Nom du patient
+ <input type="text" name="name" id="name" class="w-full mt-2" required>
+ </label>
+
+ <label class="block text-grey-darker text-sm font-bold" for="email">
+ Adresse e-mail
+ <input type="email" name="email" id="email" class="w-full mt-2" required>
+ </label>
+
+ </div>
+
+ <label class="mt-6 mb-2 block text-grey-darker text-sm font-bold" for="message">
+ Message
+ </label>
+
+ <x-quill :snippets="$snippets">{!! $editable_message !!}</x-quill>
+
+ <input type="submit" value="Aperçu →" class="block mt-6 ml-auto bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-8 rounded cursor-pointer">
+ </form>
+
+@endsection
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\EmailController;
+use App\Http\Controllers\EmailDiagnosisController;
+use App\Http\Controllers\EmailMissingImageryController;
+use App\Http\Controllers\EmailDossierIncompleteController;
+use App\Http\Controllers\EmailConsultationUnnecessaryController;
/*
|--------------------------------------------------------------------------
// Apply basic auth middleware to all routes
Route::middleware(['auth.basic'])->group(function() {
- Route::redirect('/', '/diagnosis');
- Route::match(['get', 'post'], '/diagnosis', [EmailController::class, 'diagnosis']);
+ Route::view('/', 'home');
+ Route::match(['get', 'post'], '/missing-imagery', [EmailMissingImageryController::class, 'index']);
+ Route::match(['get', 'post'], '/dossier-incomplete', [EmailDossierIncompleteController::class, 'index']);
+ Route::match(['get', 'post'], '/diagnosis', [EmailDiagnosisController::class, 'index']);
+ Route::match(['get', 'post'], '/consultation-unnecessary', [EmailConsultationUnnecessaryController::class, 'index']);
});
-Route::redirect('/template', '/diagnosis');
+Route::redirect('/template', '/');
// Quick way to test the email output without sending mail
Route::get('/test', function() {