From: Vincent Vanwaelscappel Date: Tue, 6 Jan 2026 17:31:32 +0000 (+0100) Subject: wip #7871 @1 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=bb3b42d1f3a1d638e489e503bf3dd05afe2c5a4d;p=fluidbook-toolbox.git wip #7871 @1 --- diff --git a/app/Http/Controllers/Admin/Operations/FluidbookPublication/Services/FormOperation.php b/app/Http/Controllers/Admin/Operations/FluidbookPublication/Services/FormOperation.php index 5fd992684..86d6084e2 100644 --- a/app/Http/Controllers/Admin/Operations/FluidbookPublication/Services/FormOperation.php +++ b/app/Http/Controllers/Admin/Operations/FluidbookPublication/Services/FormOperation.php @@ -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< $v) { - if (str_starts_with($v, ':checked:')) { - $val = 'V/' . utf8_decode(ucfirst(substr($v, 9))); - } else { - $val = 'V(' . utf8_decode($v) . ')'; - } - $fdfFields .= '<>' . "\n"; - } - $fdfFields .= '] >> >> -endobj -trailer -<> -%%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 index 000000000..460a4d1c7 --- /dev/null +++ b/app/Http/Controllers/Admin/Operations/FluidbookPublication/Services/PDFFormOperation.php @@ -0,0 +1,99 @@ +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< $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 .= '<>' . "\n"; + } + $fdfFields .= '] >> >> +endobj +trailer +<> +%%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; + } +} diff --git a/app/Models/FluidbookPublication.php b/app/Models/FluidbookPublication.php index 8e49a6ff0..c3401c9dc 100644 --- a/app/Models/FluidbookPublication.php +++ b/app/Models/FluidbookPublication.php @@ -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,