]> _ Git - fluidbook-toolbox.git/commitdiff
wip #7871 @1
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 6 Jan 2026 17:31:32 +0000 (18:31 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 6 Jan 2026 17:31:32 +0000 (18:31 +0100)
app/Http/Controllers/Admin/Operations/FluidbookPublication/Services/FormOperation.php
app/Http/Controllers/Admin/Operations/FluidbookPublication/Services/PDFFormOperation.php [new file with mode: 0644]
app/Models/FluidbookPublication.php

index 5fd992684a3646ffed46b22e1a99702c14629543..86d6084e27214cf0a0eb54b3ffe8087a7ff3716e 100644 (file)
@@ -4,14 +4,7 @@ namespace App\Http\Controllers\Admin\Operations\FluidbookPublication\Services;
 
 use App\Http\Middleware\CheckIfAdmin;
 use App\Http\Middleware\VerifyCsrfToken;
-use App\Models\FluidbookPublication;
-use Com\Tecnick\Pdf\Tcpdf;
-use Cubist\Util\CommandLine;
-use Cubist\Util\Files\Files;
 use Cubist\Util\Str;
-use Cubist\Util\Text;
-use Fpdf\Fpdf;
-use FPDM;
 use Illuminate\Mail\Message;
 use Illuminate\Support\Facades\Mail;
 use Illuminate\Support\Facades\Route;
@@ -22,62 +15,9 @@ trait FormOperation
     {
         foreach (['services', 's'] as $s) {
             Route::match(['post'], $s . '/form', $controller . '@form')->withoutMiddleware([CheckIfAdmin::class, VerifyCsrfToken::class]);
-            Route::match(['post'], $s . '/pdfform', $controller . '@pdfForm')->withoutMiddleware([CheckIfAdmin::class, VerifyCsrfToken::class]);
         }
     }
 
-    public function pdfForm()
-    {
-        /** @var FluidbookPublication $fluidbook */
-        $fluidbook = FluidbookPublication::withoutGlobalScopes()->find(request('id'));
-        $fluidbook->getLinksAndRulers($links, $rulers);
-        $link = $links[request('linkid')];
-        $rawFields = request('fields');
-        $fields = [];
-        foreach ($rawFields as $k => $v) {
-            $fields[str_replace('__SPACE__', ' ', $k)] = $v;
-        }
-
-        $pdfFile = $fluidbook->getAssetDir() . $link['to'];
-        $email = $link['target'];
-        $tmp = Files::tempnam() . '.pdf';
-        $fdfFields = '%FDF-1.2
-1 0 obj<</FDF<< /Fields[' . "\n";
-        foreach ($fields as $k => $v) {
-            if (str_starts_with($v, ':checked:')) {
-                $val = 'V/' . utf8_decode(ucfirst(substr($v, 9)));
-            } else {
-                $val = 'V(' . utf8_decode($v) . ')';
-            }
-            $fdfFields .= '<</T(' . utf8_decode($k) . ')/' . $val . '>>' . "\n";
-        }
-        $fdfFields .= '] >> >>
-endobj
-trailer
-<</Root 1 0 R>>
-%%EOF';
-
-        $fdf = Files::tempnam() . '.fdf';
-        file_put_contents($fdf, $fdfFields);
-
-        $pdftk = new CommandLine('pdftk');
-        $pdftk->setManualArg("$pdfFile fill_form $fdf output $tmp");
-        $pdftk->execute();
-
-        Mail::raw('', function (Message $message) use ($email, $fields, $tmp, $fdf) {
-            $message->to($email);
-            if ($fields['Email']) {
-                $message->cc($fields['Email']);
-            }
-            $message->subject('CFGroup Form')->attachFromPath($tmp, 'form.pdf')->attachFromPath($fdf, 'form.fdf');
-        });
-
-
-        unlink($fdf);
-        unlink($tmp);
-
-    }
-
     public function form()
     {
         $f = Str::ucfirst(Str::camel(request('form')));
diff --git a/app/Http/Controllers/Admin/Operations/FluidbookPublication/Services/PDFFormOperation.php b/app/Http/Controllers/Admin/Operations/FluidbookPublication/Services/PDFFormOperation.php
new file mode 100644 (file)
index 0000000..460a4d1
--- /dev/null
@@ -0,0 +1,99 @@
+<?php
+
+namespace App\Http\Controllers\Admin\Operations\FluidbookPublication\Services;
+
+use App\Http\Middleware\CheckIfAdmin;
+use App\Http\Middleware\VerifyCsrfToken;
+use App\Models\FluidbookPublication;
+use Cubist\Util\CommandLine;
+use Cubist\Util\Files\Files;
+use Illuminate\Mail\Message;
+use Illuminate\Support\Facades\Mail;
+use Illuminate\Support\Facades\Route;
+
+trait PDFFormOperation
+{
+    protected $_pdfform_link;
+
+    protected function setupPDFFormRoutes($segment, $routeName, $controller)
+    {
+        foreach (['services', 's'] as $s) {
+            Route::match(['post'], $s . '/pdfform', $controller . '@pdfForm')->withoutMiddleware([CheckIfAdmin::class, VerifyCsrfToken::class]);
+        }
+    }
+
+    public function pdfForm()
+    {
+        /** @var FluidbookPublication $fluidbook */
+        $fluidbook = FluidbookPublication::withoutGlobalScopes()->find(request('id'));
+        $fluidbook->getLinksAndRulers($links, $rulers);
+        $this->_pdfform_link = $link = $links[request('linkid')];
+        $rawFields = request('fields');
+        $fields = [];
+        foreach ($rawFields as $k => $v) {
+            $fields[str_replace('__SPACE__', ' ', $k)] = $v;
+        }
+
+        $pdfFile = $fluidbook->getAssetDir() . $link['to'];
+        $emailFields = ['Email'];
+        $email = false;
+
+        $tmp = Files::tempnam() . '.pdf';
+        $fdfFields = '%FDF-1.2
+1 0 obj<</FDF<< /Fields[' . "\n";
+        foreach ($fields as $k => $v) {
+            if (in_array($k, $emailFields)) {
+                $email = $v;
+            }
+            if (str_starts_with($v, ':checked:')) {
+                $val = 'V/' . utf8_decode(ucfirst(substr($v, 9)));
+            } else {
+                $val = 'V(' . utf8_decode($v) . ')';
+            }
+            $fdfFields .= '<</T(' . utf8_decode($k) . ')/' . $val . '>>' . "\n";
+        }
+        $fdfFields .= '] >> >>
+endobj
+trailer
+<</Root 1 0 R>>
+%%EOF';
+
+        $fdf = Files::tempnam() . '.fdf';
+        file_put_contents($fdf, $fdfFields);
+
+        $pdftk = new CommandLine('pdftk');
+        $pdftk->setManualArg("$pdfFile fill_form $fdf output $tmp");
+        $pdftk->execute();
+
+        $recipient = $link['target'] ?: $fluidbook->pdfform_to;
+
+        // Admin email
+        Mail::raw($this->_replace($fluidbook->pdfform_email_body), function (Message $message) use ($fluidbook, $recipient, $email, $fields, $tmp, $fdf) {
+            $message->to($recipient);
+            if ($email) {
+                $message->replyTo($email);
+            }
+            $message->subject($this->_replace($fluidbook->pdfform_email_subject));
+            $message->attachFromPath($tmp, 'form.pdf');
+        });
+        // User email
+        if ($fluidbook->pdfform_copy_user && $email) {
+            Mail::raw($this->_replace($fluidbook->pdfform_email_body_user), function (Message $message) use ($fluidbook, $recipient, $email, $fields, $tmp, $fdf) {
+                $message->to($email);
+                $message->replyTo($recipient);
+                $message->subject($this->_replace($fluidbook->pdfform_email_subject_user));
+                $message->attachFromPath($tmp, 'form.pdf');
+            });
+        }
+
+        unlink($fdf);
+        unlink($tmp);
+
+    }
+
+    protected function _replace($c)
+    {
+        $c = str_replace('%formname%', $this->_pdfform_link['name'], $c);
+        return $c;
+    }
+}
index 8e49a6ff07a36d48274397afaee2fa2d4c3a3723..c3401c9dcb1cf30f5829f8d9d15064a0d6a93a27 100644 (file)
@@ -32,6 +32,7 @@ use App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\BastideO
 use App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\ExportPdfOperation;
 use App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\FormOperation;
 use App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\GetPageFromWebsiteOperation;
+use App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\PDFFormOperation;
 use App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\PumaOperation;
 use App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\SocialImageOperation;
 use App\Http\Controllers\Admin\Operations\FluidbookPublication\StatsOperation;
@@ -121,6 +122,7 @@ class FluidbookPublication extends ToolboxStatusModel
         ExportPdfOperation::class,
         GetPageFromWebsiteOperation::class,
         FormOperation::class,
+        PDFFormOperation::class,
         // Carts
         BastideOperation::class,
         PumaOperation::class,