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;
{
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')));
--- /dev/null
+<?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;
+ }
+}
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;
ExportPdfOperation::class,
GetPageFromWebsiteOperation::class,
FormOperation::class,
+ PDFFormOperation::class,
// Carts
BastideOperation::class,
PumaOperation::class,