From: Stephen Cameron Date: Thu, 22 Apr 2021 22:57:31 +0000 (+0200) Subject: Wait #4244 @14 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=1c851c34f65b5999a8a8940d688f32771b117734;p=ccv-email.git Wait #4244 @14 --- diff --git a/app/Http/Controllers/EmailConsultationUnnecessaryController.php b/app/Http/Controllers/EmailConsultationUnnecessaryController.php new file mode 100644 index 0000000..86f6a4d --- /dev/null +++ b/app/Http/Controllers/EmailConsultationUnnecessaryController.php @@ -0,0 +1,80 @@ +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')); + } +} diff --git a/app/Http/Controllers/EmailController.php b/app/Http/Controllers/EmailController.php index 5bba605..8a81b94 100644 --- a/app/Http/Controllers/EmailController.php +++ b/app/Http/Controllers/EmailController.php @@ -2,82 +2,37 @@ 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"], "
", $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; } } diff --git a/app/Http/Controllers/EmailDiagnosisController.php b/app/Http/Controllers/EmailDiagnosisController.php new file mode 100644 index 0000000..3e8c0df --- /dev/null +++ b/app/Http/Controllers/EmailDiagnosisController.php @@ -0,0 +1,114 @@ +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')); + } +} diff --git a/app/Http/Controllers/EmailDossierIncompleteController.php b/app/Http/Controllers/EmailDossierIncompleteController.php new file mode 100644 index 0000000..65ac8d1 --- /dev/null +++ b/app/Http/Controllers/EmailDossierIncompleteController.php @@ -0,0 +1,65 @@ +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')); + } +} diff --git a/app/Http/Controllers/EmailMissingImageryController.php b/app/Http/Controllers/EmailMissingImageryController.php new file mode 100644 index 0000000..73d1cef --- /dev/null +++ b/app/Http/Controllers/EmailMissingImageryController.php @@ -0,0 +1,79 @@ +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.

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.

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')); + } +} diff --git a/app/Mail/Diagnosis.php b/app/Mail/Diagnosis.php index df7d0b5..d428bd6 100644 --- a/app/Mail/Diagnosis.php +++ b/app/Mail/Diagnosis.php @@ -30,16 +30,20 @@ class Diagnosis extends Mailable */ 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); } } diff --git a/app/Mail/Shared.php b/app/Mail/Shared.php new file mode 100644 index 0000000..cbfeb8d --- /dev/null +++ b/app/Mail/Shared.php @@ -0,0 +1,45 @@ +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); + } +} diff --git a/composer.json b/composer.json index def61d3..dd3f219 100644 --- a/composer.json +++ b/composer.json @@ -9,6 +9,7 @@ "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", diff --git a/composer.lock b/composer.lock index b44da9c..db7fb06 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "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", @@ -118,6 +118,65 @@ ], "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", diff --git a/resources/views/components/quill.blade.php b/resources/views/components/quill.blade.php new file mode 100644 index 0000000..e0a7e44 --- /dev/null +++ b/resources/views/components/quill.blade.php @@ -0,0 +1,97 @@ +{{-- Quill JS Editor --}} + +@props([ + 'field_name' => 'message', + 'snippets' => [], +]) + +
{{ $slot }}
+ + +@push('head') + + +@endpush + +@push('scripts') + + {{-- Quill Toolbar library: https://github.com/T-vK/DynamicQuillTools --}} + + +@endpush diff --git a/resources/views/components/trim.blade.php b/resources/views/components/trim.blade.php new file mode 100644 index 0000000..4442898 --- /dev/null +++ b/resources/views/components/trim.blade.php @@ -0,0 +1,7 @@ +{{-- Trim whitespace around input --}} +@php + $lines = explode(PHP_EOL, $slot); + $lines = array_map('trim', $lines); +@endphp + +{{ implode(PHP_EOL, $lines) }} diff --git a/resources/views/consultation-unnecessary/message.html b/resources/views/consultation-unnecessary/message.html new file mode 100644 index 0000000..de6bd80 --- /dev/null +++ b/resources/views/consultation-unnecessary/message.html @@ -0,0 +1,19 @@ +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.
 + +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. + +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 : Rendez-vous au CCV + +Nous restons biensur à votre disposition si votre pathologie évolue dans l’avenir. N’hésitez pas alors, à nous solliciter à nouveau.
 diff --git a/resources/views/diagnosis/email.blade.php b/resources/views/diagnosis/email.blade.php index 782229e..8ec38c1 100644 --- a/resources/views/diagnosis/email.blade.php +++ b/resources/views/diagnosis/email.blade.php @@ -1,67 +1,14 @@ @extends($layout ?? 'layouts.email-wrapper') -@push('head') - -@endpush - @section('content') @parent - {{-- HEADER --}} - - - - -
- - CCV Montpellier - - - Trouvons ensemble la solution chirurgicale à votre problème de dos -

- - -
- {{-- Body Intro --}} -
- Bonjour {{ $name }},
-
- 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 {{ $pathology }} qui pourrait être prise en charge par un de nos spécialistes.
-
- Vous trouverez ici, une fiche résumant cette pathologie et les possibilités de traitements.
-
- Le Docteur {{ $dr }} 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 : +
+ {!! $message_html !!}
@@ -107,104 +54,4 @@ - - - - -
- Bien cordialement, -

- L’équipe du CCV MONTPELLIER -
- - - - - {{-- Social icons --}} - - - - -
- - - - - - -
Instagram CCVYouTube CCVSOS DOS
-
- - - - - - - - - - - - {{-- Tarifs --}} - - - - - - - -
-

Tarifs des consultations du CCV MONTPELLIER

- - - - - - - - - - - - - - - - - - - - - - - -
Étude préliminaire de votre dossier (Demande d'avis médical en ligne) :
Gratuit
Consultation médicale au CCV (Clinique du Parc) :
(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).
80€
Téléconsultation médicale en ligne (Vidéo consultation) :
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).
100€
Séjour médical personnalisé :
Incluant frais d’hospitalisation, transport, hébergement et prestations personnalisées à la clinique.
Sur devis
Interventions pour patients français
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.
Sur devis
-
-

Vous ne connaissez pas encore le service ma E-Consultation du CCV MONTPELLIER ?

-
- 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.
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.  -
-
- 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. -
-
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. En savoir plus 
-
- 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. Pour être rappelé par le secrétariat médical du CCV Montpellier, cliquez-ici. -
-
- @endsection diff --git a/resources/views/diagnosis/form.blade.php b/resources/views/diagnosis/form.blade.php index 35e051b..52204cc 100644 --- a/resources/views/diagnosis/form.blade.php +++ b/resources/views/diagnosis/form.blade.php @@ -2,7 +2,9 @@ @section('content') -

E-mail de diagnostic

+ CCV Montpellier + +

E-mail de diagnostic

@if (session('message'))
@@ -10,7 +12,7 @@
@endif -
+ @csrf @@ -50,6 +52,12 @@ + + + {!! $editable_message !!} +
diff --git a/resources/views/diagnosis/message.html b/resources/views/diagnosis/message.html new file mode 100644 index 0000000..cd4738f --- /dev/null +++ b/resources/views/diagnosis/message.html @@ -0,0 +1,13 @@ +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 {{ PATHOLOGIE }} qui pourrait être prise en charge par un de nos spécialistes. + +Vous trouverez ici, une fiche résumant cette pathologie et les possibilités de traitements. + +Le Docteur {{ DOCTEUR }} 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 : diff --git a/resources/views/dossier-incomplete/message.html b/resources/views/dossier-incomplete/message.html new file mode 100644 index 0000000..63a0de7 --- /dev/null +++ b/resources/views/dossier-incomplete/message.html @@ -0,0 +1,25 @@ +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. + +

Voici, le complément de bilan préconisé par nos spécialistes et indispensable à l’étude de votre cas : + +

    +
  • Une IRM lombaire

  • +
  • Une IRM cervicale

  • +
  • Un scanner lombaire

  • +
  • Un scanner cervical
  • +
  • Des radiographies du rachis lombaire

  • +
  • Des radiographies du rachis cervical

  • +
  • Des radiographies du rachis en totalité
  • +
+ +
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. + +

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. + +

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. + +

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. Pour être rappelé par le secrétariat médical du CCV Montpellier, cliquez-ici. diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php new file mode 100644 index 0000000..67d8395 --- /dev/null +++ b/resources/views/home.blade.php @@ -0,0 +1,31 @@ +@extends('layouts.app') + +@push('head') + +@endpush + +@section('content') + + CCV Montpellier + +

Choisissez un modèle de réponse

+ +
+
    +
  1. Bug transfert d’imagerie
  2. +
  3. Dossier incomplet
  4. +
  5. Réponse positive
  6. +
  7. Consultation inutile
  8. +
+
+ +@endsection diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 95e74eb..e0924ec 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -8,7 +8,8 @@ @stack('head') - + @yield('content') + @stack('scripts') diff --git a/resources/views/layouts/email-wrapper.blade.php b/resources/views/layouts/email-wrapper.blade.php index d6c6245..7676536 100644 --- a/resources/views/layouts/email-wrapper.blade.php +++ b/resources/views/layouts/email-wrapper.blade.php @@ -24,7 +24,35 @@ + @stack('head') + + + @@ -42,7 +70,9 @@
+ @include('shared/email-header') @yield('content') + @include('shared/email-footer')