--- /dev/null
+<?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;
+ }
+}
--- /dev/null
+<?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);
+
+ }
+}
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'];
$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',
'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',
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]);
}
}
"ext-simplexml": "*",
"ext-tidy": "*",
"ext-zip": "*",
+ "ext-json": "*",
"cubedesigners/userdatabase": "dev-master",
"cubist/cms-back": "dev-master",
"league/csv": "^9.6",
<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>