-
Notifications
You must be signed in to change notification settings - Fork 42
/
Copy pathMessageMaker.php
126 lines (102 loc) · 3.92 KB
/
MessageMaker.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?php
declare(strict_types=1);
/*
* This file is part of HackzillaTicketBundle package.
*
* (c) Daniel Platt <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Hackzilla\Bundle\TicketBundle\Maker;
use Exception;
use Hackzilla\Bundle\TicketBundle\Model\MessageAttachmentInterface;
use Hackzilla\Bundle\TicketBundle\Model\MessageAttachmentTrait;
use Hackzilla\Bundle\TicketBundle\Model\TicketMessageInterface;
use Hackzilla\Bundle\TicketBundle\Model\TicketMessageTrait;
use Symfony\Bundle\MakerBundle\ConsoleStyle;
use Symfony\Bundle\MakerBundle\Doctrine\EntityRelation;
use Symfony\Bundle\MakerBundle\Generator;
use Symfony\Bundle\MakerBundle\InputConfiguration;
use Symfony\Bundle\MakerBundle\Maker\MakeEntity;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
final class MessageMaker extends AbstractMaker
{
private bool $hasAttachment = false;
public static function getCommandName(): string
{
return 'make:entity:message';
}
public static function getCommandDescription(): string
{
return MakeEntity::getCommandDescription();
}
public function configureCommand(Command $command, InputConfiguration $inputConfig): void
{
$command->addOption('attachment', null, InputOption::VALUE_NONE, 'Overwrite any existing getter/setter methods');
parent::configureCommand($command, $inputConfig);
}
public function generate(InputInterface $input, ConsoleStyle $io, Generator $generator): void
{
$this->hasAttachment = $input->getOption('attachment');
parent::generate($input, $io, $generator);
}
/**
* @throws Exception
*/
protected function fields(): array
{
$userRelation = new EntityRelation(EntityRelation::MANY_TO_ONE, $this->getMessageClass(), $this->getUserClass());
$userRelation->setOwningProperty('user');
$userRelation->setInverseProperty('user');
$userRelation->setMapInverseRelation(false);
$userRelation->setIsNullable(true);
$ticketRelation = new EntityRelation(EntityRelation::MANY_TO_ONE, $this->getMessageClass(), $this->getTicketClass());
$ticketRelation->setOwningProperty('ticket');
$ticketRelation->setInverseProperty('messages');
$fields = [
$ticketRelation,
$userRelation,
['fieldName' => 'message', 'type' => 'text', 'nullable' => true],
['fieldName' => 'status', 'type' => 'integer', 'nullable' => false],
['fieldName' => 'priority', 'type' => 'integer', 'nullable' => false],
['fieldName' => 'createdAt', 'type' => 'datetime', 'nullable' => false],
];
if ($this->hasAttachment()) {
$fields[] = ['fieldName' => 'attachmentName', 'type' => 'string', 'length' => 255, 'nullable' => true];
$fields[] = ['fieldName' => 'attachmentSize', 'type' => 'integer', 'nullable' => true];
$fields[] = ['fieldName' => 'attachmentMimeType', 'type' => 'string', 'length' => 255, 'nullable' => true];
}
return $fields;
}
protected function entityClass(): string
{
return $this->getMessageClass();
}
protected function traits(): array
{
$traits = [
TicketMessageTrait::class,
];
if ($this->hasAttachment()) {
$traits[] = MessageAttachmentTrait::class;
}
return $traits;
}
protected function interfaces(): array
{
$interfaces = [
TicketMessageInterface::class,
];
if ($this->hasAttachment()) {
$interfaces[] = MessageAttachmentInterface::class;
}
return $interfaces;
}
private function hasAttachment(): bool
{
return $this->hasAttachment;
}
}