Skip to content

Commit

Permalink
dev: Refactor getting (confidential) messages
Browse files Browse the repository at this point in the history
  • Loading branch information
marien-probesys committed Aug 30, 2024
1 parent 1bdc2f8 commit 665785d
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 28 deletions.
36 changes: 15 additions & 21 deletions src/Entity/Ticket.php
Original file line number Diff line number Diff line change
Expand Up @@ -447,42 +447,36 @@ public static function getTypesWithLabels(): array
/**
* @return Collection<int, Message>
*/
public function getMessages(): Collection
public function getMessages(bool $confidential = true): Collection
{
return $this->messages;
if ($confidential) {
return $this->messages;
} else {
$criteria = new Criteria();
$expr = new Comparison('isConfidential', '=', false);
$criteria->where($expr);

/** @var ArrayCollection<int, Message> $messages */
$messages = $this->messages;
return $messages->matching($criteria);
}
}

public function getPublicMessageBefore(Message $beforeMessage): ?Message
public function getMessageBefore(Message $beforeMessage, bool $confidential = true): ?Message
{
$previousMessage = null;

foreach ($this->messages as $message) {
foreach ($this->getMessages($confidential) as $message) {
if ($message->getId() === $beforeMessage->getId()) {
return $previousMessage;
}

if (!$message->isConfidential()) {
$previousMessage = $message;
}
$previousMessage = $message;
}

return null;
}

/**
* @return Collection<int, Message>
*/
public function getMessagesWithoutConfidential(): Collection
{
$criteria = new Criteria();
$expr = new Comparison('isConfidential', '=', false);
$criteria->where($expr);

/** @var ArrayCollection<int, Message> $messages */
$messages = $this->messages;
return $messages->matching($criteria);
}

public function addMessage(Message $message): static
{
if (!$this->messages->contains($message)) {
Expand Down
4 changes: 2 additions & 2 deletions src/MessageHandler/SendMessageEmailHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public function __invoke(SendMessageEmail $data): void
return;
}

$previousMessage = $ticket->getPublicMessageBefore($message);
$previousMessage = $ticket->getMessageBefore($message, confidential: false);

$subject = "[#{$ticket->getId()}] {$ticket->getTitle()}";

Expand Down Expand Up @@ -104,7 +104,7 @@ public function __invoke(SendMessageEmail $data): void
// Set correct references headers so email clients can add the email to
// the conversation thread.
$references = [];
foreach ($ticket->getMessagesWithoutConfidential() as $message) {
foreach ($ticket->getMessages(confidential: false) as $message) {
$reference = $message->getEmailId();
if ($reference) {
$references[] = $reference;
Expand Down
8 changes: 3 additions & 5 deletions src/Service/TicketTimeline.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,13 @@ public function build(Ticket $ticket): Timeline
$timeline = new Timeline();

$organization = $ticket->getOrganization();

$includeConfidential = $this->authorizer->isGranted(
'orga:see:tickets:messages:confidential',
$organization,
);
if ($includeConfidential) {
$messages = $ticket->getMessages()->toArray();
} else {
$messages = $ticket->getMessagesWithoutConfidential()->toArray();
}

$messages = $ticket->getMessages(confidential: $includeConfidential)->toArray();

$timeline->addItems($messages);

Expand Down

0 comments on commit 665785d

Please sign in to comment.