.
*/
declare(strict_types=1);
namespace Fisharebest\Webtrees\Elements;
use Fisharebest\Webtrees\Gedcom;
use Fisharebest\Webtrees\I18N;
use Fisharebest\Webtrees\Note;
use Fisharebest\Webtrees\Registry;
use Fisharebest\Webtrees\Tree;
use function e;
use function preg_match;
use function strip_tags;
use function substr_count;
use function view;
/**
* NOTE can be text or an XREF.
*/
class NoteStructure extends SubmitterText
{
/**
* An edit control for this data.
*
* @param string $id
* @param string $name
* @param string $value
* @param Tree $tree
*
* @return string
*/
public function edit(string $id, string $name, string $value, Tree $tree): string
{
$submitter_text = new SubmitterText('');
$xref_note = new XrefNote('');
// Existing shared note.
if (preg_match('/^@' . Gedcom::REGEX_XREF . '@$/', $value)) {
return $xref_note->edit($id, $name, $value, $tree);
}
// Existing inline note.
if ($value !== '') {
return $submitter_text->edit($id, $name, $value, $tree);
}
$options = [
'inline' => I18N::translate('inline note'),
'shared' => I18N::translate('shared note'),
];
// New note - either inline or shared
return
'
' .
'';
}
/**
* Create a label/value pair for this element.
*
* @param string $value
* @param Tree $tree
*
* @return string
*/
public function labelValue(string $value, Tree $tree): string
{
$id = Registry::idFactory()->id();
$expanded = $tree->getPreference('EXPAND_NOTES') === '1';
// A note structure can contain an inline note or a linked to a shared note.
if (preg_match('/^@(' . Gedcom::REGEX_XREF . ')@$/', $value, $match) === 1) {
$note = Registry::noteFactory()->make($match[1], $tree);
if ($note === null) {
return parent::labelValue($value, $tree);
}
if (!$note->canShow()) {
return '';
}
$label = '' . I18N::translate('Shared note') . '';
$value = $note->getNote();
$html = $this->valueFormatted($value, $tree);
$first_line = '' . $note->fullName() . '';
// Shared note where the title is the same as the text
if ($html === '