From: Vincent Vanwaelscappel Date: Wed, 25 Nov 2020 17:48:13 +0000 (+0100) Subject: wip #3753 @1 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=0f99248e662bd4db23904c4553671800e4aef8f2;p=fluidbook-toolbox.git wip #3753 @1 --- diff --git a/app/Http/Controllers/Admin/Operations/FluidbookQuote/CreateFromWebsite.php b/app/Http/Controllers/Admin/Operations/FluidbookQuote/CreateFromWebsite.php new file mode 100644 index 000000000..ee7b6a1ae --- /dev/null +++ b/app/Http/Controllers/Admin/Operations/FluidbookQuote/CreateFromWebsite.php @@ -0,0 +1,145 @@ +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"), 'info@fluidbook.com'); + } 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 index 000000000..edb9e4d8d --- /dev/null +++ b/app/Mail/FluidbookQuoteReceived.php @@ -0,0 +1,88 @@ +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 = 'Une demande de devis a été envoyée avec les informations suivantes :' . "

"; + foreach ($fields as $f => $d) { + if ($post[$f] != '') { + if ($f == 'pays') { + $body .= ' * ' . $d . ' : ' . Country::translate($post['f'], 'fr') . "
"; + } else { + $body .= ' * ' . $d . ' : ' . $post[$f] . "
"; + } + } + } + $body .= "\r\n"; + if (!$spam) { + $body .= 'Veuillez-vous rendre sur la Toolbox 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 .= ''; + $this->html($body); + + } +} diff --git a/app/Models/FluidbookQuote.php b/app/Models/FluidbookQuote.php index bf10911be..98c3b5f44 100644 --- a/app/Models/FluidbookQuote.php +++ b/app/Models/FluidbookQuote.php @@ -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]); } } diff --git a/composer.json b/composer.json index ea8ee72ec..d0f785c96 100644 --- a/composer.json +++ b/composer.json @@ -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", diff --git a/resources/views/vendor/backpack/base/inc/sidebar_content.blade.php b/resources/views/vendor/backpack/base/inc/sidebar_content.blade.php index b917e8210..5df30c6fd 100644 --- a/resources/views/vendor/backpack/base/inc/sidebar_content.blade.php +++ b/resources/views/vendor/backpack/base/inc/sidebar_content.blade.php @@ -25,7 +25,7 @@