コード例 #1
0
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 . '@';
}