function create_media_object($level, $gedrec, $ged_id) { static $sql_insert_media = null; static $sql_select_media = null; if (!$sql_insert_media) { $sql_insert_media = WT_DB::prepare("INSERT INTO `##media` (m_id, m_ext, m_type, m_titl, m_filename, m_file, m_gedcom) VALUES (?, ?, ?, ?, ?, ?, ?)"); $sql_select_media = WT_DB::prepare("SELECT m_id FROM `##media` WHERE m_filename=? AND m_titl=? AND m_file=?"); } if (preg_match('/\\n\\d FILE (.+)/', $gedrec, $file_match)) { $file = $file_match[1]; } else { $file = ''; } if (preg_match('/\\n\\d TITL (.+)/', $gedrec, $file_match)) { $titl = $file_match[1]; } else { $titl = $file; } // Have we already created a media object with the same title/filename? $xref = $sql_select_media->execute(array($file, $titl, $ged_id))->fetchOne(); if (!$xref) { $xref = get_new_xref("OBJE", $ged_id); // renumber the lines $gedrec = preg_replace_callback('/\\n(\\d+)/', function ($m) use($level) { return "\n" . ($m[1] - $level); }, $gedrec); // convert to an object $gedrec = str_replace("\n0 OBJE\n", '0 @' . $xref . "@ OBJE\n", $gedrec); // Fix Legacy GEDCOMS $gedrec = preg_replace('/\\n1 FORM (.+)\\n1 FILE (.+)\\n1 TITL (.+)/', "\n1 FILE \$2\n2 FORM \$1\n2 TITL \$3", $gedrec); // Create new record $record = new WT_Media($xref, $gedrec, null, $ged_id); $sql_insert_media->execute(array($xref, $record->extension(), $record->getMediaType(), $record->title, $record->file, $ged_id, $gedrec)); } return "\n" . $level . ' OBJE @' . $xref . '@'; }