. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fisharebest\Webtrees\Auth; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Tree; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; use function assert; /** * Edit note objects. */ class EditNoteAction implements RequestHandlerInterface { /** * Show a form to create a new note object. * * @param ServerRequestInterface $request * * @return ResponseInterface */ public function handle(ServerRequestInterface $request): ResponseInterface { $tree = $request->getAttribute('tree'); assert($tree instanceof Tree); $xref = $request->getAttribute('xref'); $note = Registry::noteFactory()->make($xref, $tree); $note = Auth::checkNoteAccess($note, true); $params = (array) $request->getParsedBody(); $NOTE = $params['NOTE']; // Convert HTML line endings to GEDCOM continuations $NOTE = strtr($NOTE, ["\r\n" => "\n1 CONT "]); // "\" and "$" are significant in preg replacement strings, so escape them. $NOTE = str_replace(['\\', '$'], ['\\\\', '\\$'], $NOTE); $gedrec = preg_replace( '/^0 @' . $note->xref() . '@ NOTE.*(\n1 CONT.*)*/', '0 @' . $note->xref() . '@ NOTE ' . $NOTE, $note->gedcom() ); $note->updateRecord($gedrec, true); return redirect($note->url()); } }