getId(), $comment->getMessage() /* @todo , [link to file] */ ); $this->comment = $this->getRelevantMessagePart($comment->getMessage(), $search); $this->authorId = $comment->getActorId(); $this->authorName = $authorName; $this->fileName = basename($path); $this->path = $this->getVisiblePath($path); } /** * @throws NotFoundException */ protected function getVisiblePath(string $path): string { $segments = explode('/', trim($path, '/'), 3); if (!isset($segments[2])) { throw new NotFoundException('Path not inside visible section'); } return $segments[2]; } /** * @throws NotFoundException */ protected function getRelevantMessagePart(string $message, string $search): string { $start = mb_stripos($message, $search); if ($start === false) { throw new NotFoundException('Comment section not found'); } $end = $start + mb_strlen($search); if ($start <= 25) { $start = 0; $prefix = ''; } else { $start -= 25; $prefix = '…'; } if ((mb_strlen($message) - $end) <= 25) { $end = mb_strlen($message); $suffix = ''; } else { $end += 25; $suffix = '…'; } return $prefix . mb_substr($message, $start, $end - $start) . $suffix; } }