From 1cfe64cc2531b33dddb3422568e2041800f19b96 Mon Sep 17 00:00:00 2001 From: Daniel Date: Wed, 25 Nov 2020 21:43:55 +0000 Subject: [PATCH] [Cover] Added Cover Entity, updated form handler Basically the same as the avatar --- plugins/Cover/Controller/Cover.php | 39 +++++++++++ social.yaml | 6 ++ src/Entity/Cover.php | 102 +++++++++++++++++++++++++++++ 3 files changed, 147 insertions(+) create mode 100644 src/Entity/Cover.php diff --git a/plugins/Cover/Controller/Cover.php b/plugins/Cover/Controller/Cover.php index bfa9d634de..be4b6d5416 100644 --- a/plugins/Cover/Controller/Cover.php +++ b/plugins/Cover/Controller/Cover.php @@ -21,8 +21,13 @@ namespace Plugin\Cover\Controller; +use App\Core\DB\DB; use App\Core\Form; use function App\Core\I18n\_m; +use App\Entity\Cover as CoverEntity; +use App\Util\Common; +use App\Util\Exception\ClientException; +use Component\Media\Media; use Symfony\Component\Form\Extension\Core\Type\FileType; use Symfony\Component\Form\Extension\Core\Type\HiddenType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; @@ -30,6 +35,9 @@ use Symfony\Component\HttpFoundation\Request; class Cover { + /** + * Display and handle the cover edit page + */ public function cover(Request $request) { $form = Form::create([ @@ -37,6 +45,37 @@ class Cover ['hidden', HiddenType::class, []], ['save', SubmitType::class, ['label' => _m('Submit')]], ]); + + $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { + $data = $form->getData(); + if (isset($data['cover'])) { + $sfile = $data['cover']; + } else { + throw new ClientException('Invalid form'); + } + $user = Common::user(); + $actor_id = $user->getId(); + $file = Media::validateAndStoreFile($sfile, Common::config('cover', 'dir'), $title = null, $is_local = true, $use_unique = $actor_id); + $old_file = null; + $cover = DB::find('cover', ['gsactor_id' => $actor_id]); + // Must get old id before inserting another one + if ($cover != null) { + //$old_file = $avatar->delete(); + } + DB::persist($file); + // Can only get new id after inserting + DB::flush(); + $cover = CoverEntity::create(['gsactor_id' => $actor_id, 'file_id' => $file->getId()]); + var_dump($cover); + DB::persist($cover); + DB::flush(); + // Only delete files if the commit went through + if ($old_file != null) { + @unlink($old_file); + } + } + return ['_template' => 'Cover/cover.html.twig', 'form' => $form->createView()]; } } diff --git a/social.yaml b/social.yaml index 427d4e982b..007d601ecb 100644 --- a/social.yaml +++ b/social.yaml @@ -46,6 +46,12 @@ parameters: default: "/assets/default-avatar.svg" max_size_px: 300 + cover: + server: + ssl: + dir: "%kernel.project_dir%/file/cover/" + max_size_px: 300 + javascript: server: ssl: diff --git a/src/Entity/Cover.php b/src/Entity/Cover.php new file mode 100644 index 0000000000..dcd61449ef --- /dev/null +++ b/src/Entity/Cover.php @@ -0,0 +1,102 @@ +. + +// }}} + +namespace App\Entity; + +use App\Core\Entity; +use DateTimeInterface; + +class Cover extends Entity +{ + // {{{ Autocode + + private int $gsactor_id; + private int $file_id; + private DateTimeInterface $created; + private DateTimeInterface $modified; + + public function setGsactorId(int $gsactor_id): self + { + $this->gsactor_id = $gsactor_id; + return $this; + } + + public function getGsactorId(): int + { + return $this->gsactor_id; + } + + public function setFileId(int $file_id): self + { + $this->file_id = $file_id; + return $this; + } + + public function getFileId(): int + { + return $this->file_id; + } + + public function setCreated(DateTimeInterface $created): self + { + $this->created = $created; + return $this; + } + + public function getCreated(): DateTimeInterface + { + return $this->created; + } + + public function setModified(DateTimeInterface $modified): self + { + $this->modified = $modified; + return $this; + } + + public function getModified(): DateTimeInterface + { + return $this->modified; + } + + // }}} Autocode + + public static function schemaDef(): array + { + return [ + 'name' => 'cover', + 'fields' => [ + 'gsactor_id' => ['type' => 'int', 'not null' => true, 'description' => 'foreign key to gsactor table'], + 'file_id' => ['type' => 'int', 'not null' => true, 'description' => 'foreign key to file table'], + 'created' => ['type' => 'datetime', 'not null' => true, 'description' => 'date this record was created', 'default' => 'CURRENT_TIMESTAMP'], + 'modified' => ['type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified', 'default' => 'CURRENT_TIMESTAMP'], + ], + 'primary key' => ['gsactor_id'], + 'foreign keys' => [ + 'cover_gsactor_id_fkey' => ['gsactor', ['gsactor_id' => 'id']], + 'cover_file_id_fkey' => ['file', ['file_id' => 'id']], + ], + 'indexes' => [ + 'cover_file_id_idx' => ['file_id'], + ], + ]; + } +}