]> _ Git - psq.git/commitdiff
unlayer
authorLouis Jeckel <louis.jeckel@outlook.com>
Tue, 17 Nov 2020 13:57:39 +0000 (14:57 +0100)
committerLouis Jeckel <louis.jeckel@outlook.com>
Tue, 17 Nov 2020 13:57:39 +0000 (14:57 +0100)
13 files changed:
.idea/lettre-pharma.iml
.idea/php.xml
app/EmailTemplate.php
app/Mail/TemplateMail.php
app/Mail/TemplateMailOld.php [new file with mode: 0644]
app/Nova/Actions/SendCustomNotification.php
app/Nova/EmailTemplate.php
app/TemplateVariables.php
composer.json
composer.lock
config/app.php
config/services.php
database/migrations/2020_11_17_114315_add_design_to_email_templates.php [new file with mode: 0644]

index d83234051024d565076b063c70bf98557ce90cf2..372f6f2a75e761daa95a46f20f0a82fff5bd8c11 100644 (file)
@@ -20,6 +20,7 @@
       <excludeFolder url="file://$MODULE_DIR$/vendor/dompdf/dompdf" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/html2text/html2text" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/http-interop/http-factory-guzzle" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/idf/nova-unlayer-field" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/itsgoingd/clockwork" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/jean85/pretty-package-versions" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/judev/php-htmltruncator" />
index 8922dea2d530e245b16df7cfa2648dffedbedf3e..f5778500cf3d13452ec76755afd4ef6e2d3d7e9e 100644 (file)
       <path value="$PROJECT_DIR$/vendor/psq/psq-theme" />
       <path value="$PROJECT_DIR$/vendor/numaxlab/nova-ckeditor5-classic" />
       <path value="$PROJECT_DIR$/vendor/metrixinfo/nova-iframe" />
+      <path value="$PROJECT_DIR$/vendor/idf/nova-unlayer-field" />
     </include_path>
   </component>
   <component name="PhpInterpreters">
index 6fb79a5799cb109ae507a64c0a36549e8769465a..8155b95e7f311048e5ad6c428f062190e52e3c49 100644 (file)
@@ -3,8 +3,10 @@
 namespace App;
 
 use App\Mail\TemplateMail;
+use App\Mail\TemplateMailOld;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Mail\Mailable;
 use Illuminate\Support\Str;
 
 /**
@@ -21,9 +23,12 @@ class EmailTemplate extends Model
     public $timestamps = false;
 
     protected $casts = [
-        'show_in_actions' => 'boolean'
+        'show_in_actions' => 'boolean',
+        'design' => 'array',
     ];
 
+    protected $guarded = [];
+
     /**
      * @param $slug
      * @return EmailTemplate
@@ -48,7 +53,7 @@ class EmailTemplate extends Model
 
             $match = Str::before(Str::after($matches[0], '%'), '%');
 
-            return $user->templateAttribute($match);
+            return $user->templateAttribute($match, null) ?? $matches[0];
 
         }, $content);
 
@@ -103,7 +108,18 @@ class EmailTemplate extends Model
     public function render()
     {
         $user = User::query()->offset(1)->first();
-        return (new TemplateMail($this->fillFor($user), $this->fillSubjectFor($user)))->render();
+        return $this->getMailFor($user)->render();
+    }
+
+    /**
+     * @param User $user
+     * @return Mailable
+     */
+    public function getMailableFor(User $user)
+    {
+        return $this->html ?
+            (new TemplateMail($this->fillFor($user), $this->fillSubjectFor($user))) :
+            (new TemplateMailOld($this->fillFor($user), $this->fillSubjectFor($user)));
     }
 
     /**
@@ -114,4 +130,11 @@ class EmailTemplate extends Model
     {
         return $this->render();
     }
+
+    public function getContentAttribute()
+    {
+        return $this->html ?? $this->getAttributes()['content'];
+    }
+
+
 }
index a574f1af81ec650d249c803fe87854dce990fba1..882ab60c9ce3ab532a70cd5994b2a72ea2d8739a 100644 (file)
@@ -38,6 +38,8 @@ class TemplateMail extends Mailable implements ShouldQueue
      */
     public function build()
     {
-        return $this->markdown('emails.template');
+        return $this->html($this->content);
     }
+
+
 }
diff --git a/app/Mail/TemplateMailOld.php b/app/Mail/TemplateMailOld.php
new file mode 100644 (file)
index 0000000..91be9a8
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+
+namespace App\Mail;
+
+use App\EmailTemplate;
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Mail\Mailable;
+use Illuminate\Queue\SerializesModels;
+
+/**
+ * Class TemplateMailOld
+ * @package App\Mail
+ * @deprecated
+ * @todo REMOVE
+ */
+class TemplateMailOld extends Mailable implements ShouldQueue
+{
+    use Queueable, SerializesModels;
+
+    /**
+     * @var string
+     */
+    public $content;
+
+
+    /**
+     * Create a new message instance.
+     *
+     * @param $content
+     * @param $subject
+     */
+    public function __construct($content, $subject)
+    {
+        $this->content = $content;
+        $this->subject = $subject;
+        $this->replyTo(config('app.emails.olivier'));
+    }
+
+    /**
+     * Build the message.
+     *
+     * @return $this
+     */
+    public function build()
+    {
+        return $this->markdown('emails.template');
+    }
+
+
+}
index a03a3ee7129481d5dfe964b192cfdb691cf20798..921bf3094b9b19d7ea1a4c913b5732c143d0daaf 100644 (file)
@@ -73,9 +73,11 @@ class SendCustomNotification extends Action
 
     /**
      * @return array
+     * @todo
      */
     public static function getActions()
     {
+        return [];
          return \App\EmailTemplate::inActionsMenu()->get()->mapInto(self::class)->toArray();
     }
 }
index e0cee3b744339bb0abb61e6a78a632c8aa1023d1..daf9d56f55ed6e2fdd33946ba821c095046b7428 100644 (file)
@@ -2,6 +2,7 @@
 
 namespace App\Nova;
 
+use IDF\NovaUnlayerField\Unlayer;
 use Illuminate\Http\Request;
 use Laravel\Nova\Fields\Boolean;
 use Laravel\Nova\Fields\ID;
@@ -59,9 +60,30 @@ class EmailTemplate extends Resource
             Text::make('Nom code', 'slug')->hideFromIndex(),
             Text::make('Nom', 'name')->required(),
             Text::make('Sujet', 'subject'),
-            Trix::make('Contenu', 'content')->alwaysShow()->required(),
             Boolean::make('Dans menu action ?', 'show_in_actions'),
             Iframe::make('Aperçu', 'renderedHtml'),
+            Unlayer::make('Email', 'design')->config([
+                'projectId' => config('services.unlayer.projectId'),
+                'templateId' => $this->design === null ? 20390 : null,
+                'locale' => app()->getLocale(),
+                'specialLinks' => [
+                    [
+                        'name' => 'Home',
+                        'href' => route('home'),
+                    ],
+                    [
+                        'name' => 'Contact',
+                        'href' => route('contact.index')
+                    ],
+
+                ],
+            ])->savingCallback(function ($request, $attribute, $model, $html)
+            {
+                $model->update([
+                    'design' => $request->get('design'),
+                    'html'  => $request->get('design_html')
+                ]);
+            })->hideFromDetail(),
         ];
     }
 
index d3f7710176c7cb2855899aad6cc268140cd56de6..ba7e74fec47cd5c20c373ef42068d7586de0609e 100644 (file)
@@ -25,15 +25,14 @@ trait TemplateVariables
             $template = EmailTemplate::findSlug($template);
         }
 
-        \Mail::to($this)->send(new TemplateMail(
-            $template->fillFor($this),
-            $template->fillSubjectFor($this)
-        ));
+
+        \Mail::to($this)->send($template->getMailableFor($this));
     }
 
     /**
      * @param $subject
      * @param $content
+     * @todo Broken
      * Fills subject and content, then sends mail
      */
     public function sendTemplateEmail($subject, $content)
index 10546970f8894231716ac339e5ad12be912489d2..df47b1ebd1f984ed632de3a1d60493797406ab17 100644 (file)
@@ -21,6 +21,7 @@
         "fruitcake/laravel-cors": "^1.0",
         "guzzlehttp/guzzle": "^6.3",
         "html2text/html2text": "^4.3",
+        "idf/nova-unlayer-field": "^0.2.1",
         "itsgoingd/clockwork": "^4.1",
         "judev/php-htmltruncator": "^1.2",
         "kriswallsmith/buzz": "^1.1",
index 5873fbf3b53b2e93844c60aa5fbdf72ce0491a0a..c721f28de9d9a584165aeeb5d4f1207d0af9bbce 100644 (file)
@@ -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": "170a4b87161eb1a26074692e0e8292bd",
+    "content-hash": "28f3513135fec03d3b77372b1e83ad1f",
     "packages": [
         {
             "name": "algolia/algoliasearch-client-php",
             ],
             "time": "2018-07-31T19:32:56+00:00"
         },
+        {
+            "name": "idf/nova-unlayer-field",
+            "version": "0.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/InteractionDesignFoundation/nova-unlayer-field.git",
+                "reference": "10fb6a76a075c699f38ae8d16786d161f408d0b8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/InteractionDesignFoundation/nova-unlayer-field/zipball/10fb6a76a075c699f38ae8d16786d161f408d0b8",
+                "reference": "10fb6a76a075c699f38ae8d16786d161f408d0b8",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.0"
+            },
+            "type": "library",
+            "extra": {
+                "laravel": {
+                    "providers": [
+                        "IDF\\NovaUnlayerField\\ServiceProvider"
+                    ]
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "IDF\\NovaUnlayerField\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A Laravel Nova field for Unlayer to compose emails and landing pages",
+            "keywords": [
+                "laravel",
+                "nova"
+            ],
+            "time": "2020-04-23T11:09:48+00:00"
+        },
         {
             "name": "imgix/imgix-php",
             "version": "3.3.0",
index 430ce7d32e5fe98117ad306ef616dd955a76eee4..a7dec26c34d5ba53fbdca3dcfc4eef17c9deec61 100644 (file)
@@ -133,6 +133,7 @@ return [
     ],
 
 
+
     /*
     |--------------------------------------------------------------------------
     | Autoloaded Service Providers
index fc4fe19deb9ff8dbded1df6d640490f0ab3cda27..5f9019474e07f12a0659a3c9d11653494c73dee8 100644 (file)
@@ -33,6 +33,10 @@ return [
     'stripe' => [
         'enable' => env('STRIPE_ENABLE', false),
         'test_social_id' => env('STRIPE_TEST_SOCIAL_ID', null)
+    ],
+
+    'unlayer' => [
+        'projectId' => 7628,
     ]
 
 ];
diff --git a/database/migrations/2020_11_17_114315_add_design_to_email_templates.php b/database/migrations/2020_11_17_114315_add_design_to_email_templates.php
new file mode 100644 (file)
index 0000000..ed19cb9
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddDesignToEmailTemplates extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('email_templates', function (Blueprint $table) {
+            $table->json('design')->nullable();
+            $table->longText('html')->nullable();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('email_templates', function (Blueprint $table) {
+            $table->dropColumn('design');
+            $table->dropColumn('html');
+        });
+    }
+}