json, true, 512, JSON_THROW_ON_ERROR)['content'];
$profile = Profile::query()->where('pubkey', $event->pubkey)->first();
if ($profile && $profile->name) {
$name = $profile->name;
} elseif ($profile && !empty($profile->display_name)) {
$name = $profile->display_name;
} else {
$name = 'Anonymous';
}
$content = $this->nprofile1($content);
$content = $this->images($content);
$content = $this->youtube($content);
$content = $this->npub1($content);
RenderedEvent::query()->updateOrCreate([
'event_id' => $event->event_id,
], [
'html' => $content,
'profile_image' => $profile && $profile->picture !== '' ? $profile->picture : 'https://robohash.org/' . $profile->pubkey,
'profile_name' => $name,
]);
}
protected function images($content): string
{
// we need to find all image urls by looking for the extension
// and replace them with the img tag
$pattern = '/(https?:\/\/.*\.(?:png|jpg|jpeg|gif|webp))/';
$replacement = '
';
return preg_replace($pattern, $replacement, $content);
}
protected function npub1($content): string
{
// Pattern to match nostr:npub1 elements, optionally followed by a non-alphanumeric character
$pattern = '/(nostr:npub1[a-zA-Z0-9]+)(\W?)/';
// find all matches of the pattern
preg_match_all($pattern, $content, $matches);
// loop through all matches
foreach ($matches[1] as $match) {
$pubkey = (new Key)->convertToHex(str($match)->after('nostr:'));
$profile = Profile::query()->where('pubkey', $pubkey)->first();
if ($profile && $profile->name) {
$name = $profile->name;
} elseif ($profile && !empty($profile->display_name)) {
$name = $profile->display_name;
} else {
$name = 'Anonymous';
}
// replace the match with the profile name
$content = str_replace($match, $name, $content);
}
return $content;
}
protected function nprofile1($content): string
{
// todo: implement this
return $content;
}
protected function youtube($content): string
{
// Pattern to match YouTube short URLs like https://youtu.be/ddvHagjmRJY?feature=shared
$pattern1 = '/https:\/\/youtu.be\/([a-zA-Z0-9-_]+)\??.*/';
$replacement1 = '';
// Pattern to match YouTube long URLs like https://www.youtube.com/watch?v=tiNZoDBGhdo
$pattern2 = '/https:\/\/www.youtube.com\/watch\?v=([a-zA-Z0-9-_]+)\??.*/';
$replacement2 = '';
// Replace both patterns in the content
$content = preg_replace($pattern1, $replacement1, $content);
$content = preg_replace($pattern2, $replacement2, $content);
return $content;
}
}