]> _ Git - fluidbook-toolbox.git/commitdiff
wip #3753 @1
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 25 Nov 2020 17:48:13 +0000 (18:48 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 25 Nov 2020 17:48:13 +0000 (18:48 +0100)
app/Http/Controllers/Admin/Operations/FluidbookQuote/CreateFromWebsite.php [new file with mode: 0644]
app/Mail/FluidbookQuoteReceived.php [new file with mode: 0644]
app/Models/FluidbookQuote.php
composer.json
resources/views/vendor/backpack/base/inc/sidebar_content.blade.php

diff --git a/app/Http/Controllers/Admin/Operations/FluidbookQuote/CreateFromWebsite.php b/app/Http/Controllers/Admin/Operations/FluidbookQuote/CreateFromWebsite.php
new file mode 100644 (file)
index 0000000..ee7b6a1
--- /dev/null
@@ -0,0 +1,145 @@
+<?php
+
+
+namespace App\Http\Controllers\Admin\Operations\FluidbookQuote;
+
+
+use App\Http\Middleware\Authenticate;
+use App\Http\Middleware\CheckIfAdmin;
+use App\Http\Middleware\VerifyCsrfToken;
+use App\Mail\FluidbookQuoteReceived;
+use App\Models\Company;
+use App\Models\FluidbookQuote;
+use App\Models\QuizAttempt;
+use App\Models\User;
+use Cubist\Util\ArrayUtil;
+use Illuminate\Support\Facades\Mail;
+use Illuminate\Support\Facades\Route;
+
+class CreateFromWebsite
+{
+    protected function setupCreateFromWebsiteRoutes($segment, $routeName, $controller)
+    {
+        Route::match(['get'], $segment . '/create-from-website', $controller . '@createFromWebsite')->withoutMiddleware([VerifyCsrfToken::class, Authenticate::class, CheckIfAdmin::class]);
+    }
+
+    protected function createFromWebsite()
+    {
+        $post = $this->validateCreateRequest();
+        if ($post === false) {
+            $resp['message'] = sprintf(__("Une erreur s'est produite. Nous avons été averti de l'erreur que vous rencontrez. Vous pouvez nous contacter par e-mail à l'adresse suivante : %s"), '<a href="mailto:info@fluidbook.com">info@fluidbook.com</a>');
+        } else {
+            $spam = (strlen($post['fax']) > 0);
+            $post['spam'] = $spam ? 'Oui' : 'Non';
+
+            if (!$spam) {
+                $r = User::where('email', $post['email']);
+                if ($r->count() == 1) {
+                    $user = $r->get();
+                } else {
+
+                    $company = new Company();
+                    $company->adresse = ['address' => $post['adresse'], 'postcode' => $post['code_postal'], 'city' => $post['ville'], 'country' => $post['pays']];
+                    if ($post['rs'] == '') {
+                        $company->name = $post['prenom'] . ' ' . $post['nom'];
+                    } else {
+                        $company->name = $post['rs'];
+                    }
+                    $company->website = $post['site'];
+                    $company->admin = 1;
+                    $company->save();
+
+                    // Création de l'utilisateur
+                    $user = new User();
+                    $user->company = $company->id;
+                    $user->firstname = $post['prenom'];
+                    $user->lastname = $post['nom'];
+                    $user->address = ['address' => $post['adresse'], 'postcode' => $post['code_postal'], 'city' => $post['ville'], 'country' => $post['pays']];
+                    $user->email = $post['email'];
+                    $user->phone = $post['telephone'];
+                    $user->locale = $post['lang'];
+                    $user->enabled = true;
+                    $user->save();
+                }
+
+                $quote = new FluidbookQuote();
+                $quote->type = $post['produits'];
+                $quote->pages = $post['nombre_pages'];
+                $quote->links = $post['nombre_liens'];
+                $quote->langs = $post['nombre_langues'];
+                $quote->message = $post['detail'];
+                $quote->coupon = $post['coupon'];
+                $quote->gclid = $post['gclid'];
+                $quote->user = $user->id;
+                $quote->reseller = 0;
+                $quote->status = 0;
+                $quote->conversion = 0;
+                $quote->admin = 0;
+                $quote->save();
+            }
+
+            $quoteMail = new FluidbookQuoteReceived();
+            $quoteMail->setData($post);
+            Mail::send($quoteMail);
+
+            $resp['message'] = (__("Votre demande de devis a bien été envoyée. Merci pour l'intérêt que vous portez à Fluidbook."));
+        }
+
+        return response()->json($resp)->header('Access-Control-Allow-Origin', '*');
+    }
+
+    protected function vaidateCreateRequest()
+    {
+        $request = request();
+
+        $d64 = base64_decode(str_replace(' ', '+', $request->get('data')));
+
+        $data = json_decode($d64);
+        if (!$data) {
+            $data = unserialize($d64);
+        }
+        if (!$data) {
+            mail('tech@fluidbook.com', '[Fluidbook Workshop] Erreur envoi demande de devis', $_GET['devis_form'] . "\n\n" . utf8_decode($d64), 'From: tech@fluidbook.com');
+            return false;
+        }
+
+        $post = array('adresse' => '',
+            'code_postal' => '',
+            'ville' => '',
+            'pays' => 'INT',
+            'site' => '',
+            'telephone' => '',
+            'produits' => '',
+            'nombre_pages' => '',
+            'nombre_liens' => '',
+            'nombre_langues' => '',
+            'coupon' => '',
+            'fax' => '',
+            'gclid' => '');
+
+        $data = ArrayUtil::flatten($data);
+
+        foreach ($data as $k => $v) {
+            $post[$k] = trim($v);
+        }
+        if (isset($post['pages'])) {
+            $post['nombre_pages'] = $post['pages'];
+            $post['nombre_liens'] = $post['liens'];
+            $post['nombre_langues'] = $post['langues'];
+        }
+
+        if (!isset($post['rs'])) {
+            $post['rs'] = $post['societe'];
+        }
+
+        if (!isset($post['detail'])) {
+            $post['detail'] = $post['details'];
+        }
+
+        if (!isset($post['site'])) {
+            $post['site'] = $post['site_internet'];
+        }
+
+        return $post;
+    }
+}
diff --git a/app/Mail/FluidbookQuoteReceived.php b/app/Mail/FluidbookQuoteReceived.php
new file mode 100644 (file)
index 0000000..edb9e4d
--- /dev/null
@@ -0,0 +1,88 @@
+<?php
+
+namespace App\Mail;
+
+use Cubist\Locale\Country;
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Mail\Mailable;
+use Illuminate\Queue\SerializesModels;
+
+class FluidbookQuoteReceived extends Mailable
+{
+    use Queueable, SerializesModels;
+
+    /**
+     * Create a new message instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        //
+    }
+
+    /**
+     * Build the message.
+     *
+     * @return $this
+     */
+    public function build()
+    {
+        return $this->view('view.name');
+    }
+
+    public function setData($post)
+    {
+        $fields = array(
+            'spam' => 'Demande SPAM',
+            'prenom' => 'Prenom',
+            'nom' => 'Nom',
+            'email' => 'E-mail',
+            'telephone' => 'Telephone',
+            'rs' => 'Société',
+            'site' => 'Site web',
+            'adresse' => 'Adresse',
+            'code_postal' => 'Code postal',
+            'ville' => 'Ville',
+            'pays' => 'Pays',
+            'produits' => 'Type',
+            'coupon' => 'Coupon',
+            'lang' => 'Langue du visiteur',
+            'nombre_liens' => 'Liens',
+            'nombre_pages' => 'Pages',
+            'nombre_langues' => 'Langues',
+            'contact_type' => 'Type de client',
+            'detail' => 'Commentaires',
+            'gclid' => 'Google Ads ID (gclid)'
+        );
+
+        $this->from($post['email'], $post['prenom'] . ' ' . $post['nom']);
+        $this->to('tech@fluidbook.com');
+        $spam = '';
+        if ($post['span'] === 'Oui') {
+            $spam = ' *** SPAM ***';
+        }
+        $this->subject('[Fluidbook Workshop]' . $spam . ' Demande de devis');
+
+        $body = '<html><body>Une demande de devis a été envoyée avec les informations suivantes :' . "<br><br>";
+        foreach ($fields as $f => $d) {
+            if ($post[$f] != '') {
+                if ($f == 'pays') {
+                    $body .= ' * ' . $d . ' : ' . Country::translate($post['f'], 'fr') . "<br>";
+                } else {
+                    $body .= ' * ' . $d . ' : ' . $post[$f] . "<br>";
+                }
+            }
+        }
+        $body .= "\r\n";
+        if (!$spam) {
+            $body .= 'Veuillez-vous rendre sur la <a href="https://toolbox.fluidbook.com/fluidbook-quote">Toolbox</a> pour prendre en charge la demande ou la confier à un revendeur';
+        } else {
+            $body .= 'Cette demande est un SPAM supposé. Elle n\'a pas été enregistrée dans la Toolbox.';
+        }
+        $body .= '</html>';
+        $this->html($body);
+
+    }
+}
index bf10911be80ccfef9a6213035e828fbc8ba84583..98c3b5f44755ec8a93ea203fc284281447b9db67 100644 (file)
@@ -10,7 +10,7 @@ use Cubist\Backpack\app\Magic\Models\CubistMagicAbstractModel;
 class FluidbookQuote extends CubistMagicAbstractModel
 {
     protected $table = 'fluidbook_quote';
-    protected $_options = ['name' => 'fluidbook_quote',
+    protected $_options = ['name' => 'fluidbook-quote',
         'singular' => 'demande de devis',
         'plural' => 'demandes de devis'];
 
@@ -23,7 +23,7 @@ class FluidbookQuote extends CubistMagicAbstractModel
         $this->addField('links', 'Hidden');
         $this->addField('langs', 'Hidden');
 
-        $this->addField('user', 'SelectFromModel', 'Utilisateur', ['optionsmodel' => User::class, 'column' => true]);
+        $this->addField('user', 'SelectFromModel', 'Utilisateur', ['optionsmodel' => User::class,'attribute' => 'nameWithCompany', 'column' => true]);
         $this->addField(['name' => 'created_at',
             'label' => 'Date',
             'type' => 'Datetime',
@@ -36,6 +36,12 @@ class FluidbookQuote extends CubistMagicAbstractModel
             'column' => true,
             'column_type' => 'date',
             'column_format' => null]);
+
+        $this->addField('message', 'Textarea', 'Message');
+        $this->addField('gclid', 'Text', 'Google Adwords ID (gclid)');
+        $this->addField('coupon', 'Text', 'Coupon');
+        $this->addField('admin', 'SelectFromModel', 'Administrateur', ['optionsmodel' => User::class, 'attribute' => 'nameWithCompany', 'column' => true]);
+        $this->addField('reseller', 'SelectFromModel', 'Revendeur', ['optionsmodel' => User::class, 'attribute' => 'nameWithCompany', 'column' => true]);
         $this->addField('status', 'SelectFromArray', 'Status', ['options' => [
             0 => 'Non traitée',
             1 => 'Confiée à un revendeur',
@@ -47,10 +53,5 @@ class FluidbookQuote extends CubistMagicAbstractModel
             2 => 'Devis refusé',
             3 => 'Projet validé',
         ], 'column' => true]);
-        $this->addField('message', 'Textarea', 'Message');
-        $this->addField('gclid', 'Text', 'Google Adwords ID (gclid)');
-        $this->addField('coupon', 'Text', 'Coupon');
-        $this->addField('admin', 'SelectFromModel', 'Administrateur', ['optionsmodel' => User::class, 'attribute' => 'nameWithCompany', 'column' => true]);
-        $this->addField('reseller', 'SelectFromModel', 'Revendeur', ['optionsmodel' => User::class, 'attribute' => 'nameWithCompany', 'column' => true]);
     }
 }
index ea8ee72ec773cbb32d95efc16bf83d9d458dca43..d0f785c96446dc73772de8ad24a95c127fe6339f 100644 (file)
@@ -18,6 +18,7 @@
         "ext-simplexml": "*",
         "ext-tidy": "*",
         "ext-zip": "*",
+        "ext-json": "*",
         "cubedesigners/userdatabase": "dev-master",
         "cubist/cms-back": "dev-master",
         "league/csv": "^9.6",
index b917e8210eb5b01e4fdac69ed05767c46298aeec..5df30c6fdbfbe7046c6bcb07d88638af457f8878 100644 (file)
@@ -25,7 +25,7 @@
         <ul class='nav-dropdown-items'>
             <li class="nav-item"><a class="nav-link" href="{{ backpack_url('signature') }}"><i
                         class="la la-signature nav-icon"></i> Signatures</a></li>
-            <li class="nav-item"><a class="nav-link" href="{{ backpack_url('fluidbook_quote') }}"><i
+            <li class="nav-item"><a class="nav-link" href="{{ backpack_url('fluidbook-quote') }}"><i
                         class="la la-wpforms nav-icon"></i> Demandes de devis</a></li>
         </ul>
     </li>