use App\Http\Middleware\CheckIfAdmin;
use App\Http\Middleware\VerifyCsrfToken;
-use App\Jobs\WebflowMirror;
use App\Models\ToolWebflow;
-use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Route;
trait WebflowOperation
protected function setupWebflowRoutes($segment, $routeName, $controller)
{
Route::match(['get', 'post'], 'webhook/webflow/{id}', function ($id) {
- ToolWebflow::withoutGlobalScopes()->find($id)->onPublish();
+ ToolWebflow::withoutGlobalScopes()->find($id)->onPublish('webflow');
})->withoutMiddleware([VerifyCsrfToken::class, CheckIfAdmin::class]);
}
use App\Http\Controllers\Admin\Operations\Tools\StaticSiteUploader;
use App\Models\ToolWebflow;
+use App\Models\User;
+use App\Notifications\ToolboxNotification;
use App\Slack\Slack;
class WebflowPublish extends Base
{
- public function __construct($id)
+ /** @var int */
+ protected $id;
+ /**
+ * @var string
+ */
+ protected $mode;
+ /** @var User */
+ protected $user;
+
+ public function __construct($id, $mode = 'manual', $user = null)
{
- /** @var ToolWebflow $wf */
- $wf = ToolWebflow::withoutGlobalScopes()->find($id);
- $wf->mirror(false, true)->debug();
+ $this->id = $id;
+ $this->mode = $mode;
+ $this->user = $user ?? backpack_user();
+ }
- StaticSiteUploader::rsync(protected_path('webflow/' . $id), $wf->upload);
+ public function handle()
+ {
+ /** @var ToolWebflow $wf */
+ $wf = ToolWebflow::withoutGlobalScopes()->find($this->id);
+ $subject = __('Site :name publié', ['name' => $wf->name]);
+ if ($this->mode === 'webflow') {
+ $wf->mirror(false, true)->debug();
+ $text = __('Le site vient d\'être républié suite à une mise à jour de webflow');
+ } else if ($this->mode === 'auto') {
+ $text = __('Le site vient d\'être républié suite à une mise à jour des contenus');
+ } else {
+ $text = __('Le site vient d\'être républié suite à une déclenchement manuel');
+ }
- Slack::send($wf->slack, __('Site publié'), __('Le site vient d\'être républié suite à une mise à jour de webflow ou manuellement'), ['Visiter' => $wf->getLocales()[0]['url']]);
+ StaticSiteUploader::rsync(protected_path('webflow/' . $this->id), $wf->upload);
+ $actions = [];
+ foreach ($wf->getLocales() as $locale) {
+ $actions[__('Visiter [:locale]', ['locale' => $locale['locale']])] = 'https://' . $locale['url'];
+ }
+ if ($this->user === null) {
+ Slack::send($wf->slack, $subject, $text, $actions, false);
+ } else {
+ $this->user->notify(new ToolboxNotification($subject, $text, $actions, true));
+ }
}
+
}
}
- public function onPublish()
+ public function onPublish($mode = 'manual')
{
- WebflowPublish::dispatch($this->id);
+ WebflowPublish::dispatch($this->id, $mode);
+ }
+
+ public function onSaved(): bool
+ {
+ $this->onPublish('auto');
+ return parent::onSaved();
}
/**
$locales = json_decode($locales, true);
}
Cache::put('webflow_' . $this->id . '_locales', $locales);
+ dddd($this->getLocales());
return parent::onRetrieved();
}