/** * Populates the global $tags array with any missing sub-tags. * * @param string $level1tag the type of the level 1 gedcom record * @param bool $add_date */ function insert_missing_subtags($level1tag, $add_date = false) { global $tags, $date_and_time, $level2_tags, $ADVANCED_PLAC_FACTS, $ADVANCED_NAME_FACTS; global $nondatefacts, $nonplacfacts; // handle MARRiage TYPE $type_val = ''; if (substr($level1tag, 0, 5) == 'MARR_') { $type_val = substr($level1tag, 5); $level1tag = 'MARR'; } foreach ($level2_tags as $key => $value) { if ($key == 'DATE' && in_array($level1tag, $nondatefacts) || $key == 'PLAC' && in_array($level1tag, $nonplacfacts)) { continue; } if (in_array($level1tag, $value) && !in_array($key, $tags)) { if ($key == 'TYPE') { add_simple_tag('2 TYPE ' . $type_val, $level1tag); } elseif ($level1tag == '_TODO' && $key == 'DATE') { add_simple_tag('2 ' . $key . ' ' . strtoupper(date('d M Y')), $level1tag); } elseif ($level1tag == '_TODO' && $key == '_WT_USER') { add_simple_tag('2 ' . $key . ' ' . WT_USER_NAME, $level1tag); } else { if ($level1tag == 'TITL' && strstr($ADVANCED_NAME_FACTS, $key) !== false) { add_simple_tag('2 ' . $key, $level1tag); } else { if ($level1tag == 'NAME' && strstr($ADVANCED_NAME_FACTS, $key) !== false) { add_simple_tag('2 ' . $key, $level1tag); } else { if ($level1tag != 'TITL' && $level1tag != 'NAME') { add_simple_tag('2 ' . $key, $level1tag); } } } } switch ($key) { // Add level 3/4 tags as appropriate case 'PLAC': if (preg_match_all('/(' . WT_REGEX_TAG . ')/', $ADVANCED_PLAC_FACTS, $match)) { foreach ($match[1] as $tag) { add_simple_tag("3 {$tag}", '', WT_Gedcom_Tag::getLabel("{$level1tag}:PLAC:{$tag}")); } } add_simple_tag('3 MAP'); add_simple_tag('4 LATI'); add_simple_tag('4 LONG'); break; case 'FILE': add_simple_tag('3 FORM'); break; case 'EVEN': add_simple_tag('3 DATE'); add_simple_tag('3 PLAC'); break; case 'STAT': if (WT_Gedcom_Code_Temp::isTagLDS($level1tag)) { add_simple_tag('3 DATE', '', WT_Gedcom_Tag::getLabel('STAT:DATE')); } break; case 'DATE': if (in_array($level1tag, $date_and_time)) { add_simple_tag('3 TIME'); } // TIME is NOT a valid 5.5.1 tag break; case 'HUSB': case 'WIFE': add_simple_tag('3 AGE'); break; case 'FAMC': if ($level1tag == 'ADOP') { add_simple_tag('3 ADOP BOTH'); } break; } } elseif ($key == 'DATE' && $add_date) { add_simple_tag('2 DATE', $level1tag, WT_Gedcom_Tag::getLabel("{$level1tag}:DATE")); } } // Do something (anything!) with unrecognized custom tags if (substr($level1tag, 0, 1) == '_' && $level1tag != '_UID' && $level1tag != '_TODO') { foreach (array('DATE', 'PLAC', 'ADDR', 'AGNC', 'TYPE', 'AGE') as $tag) { if (!in_array($tag, $tags)) { add_simple_tag("2 {$tag}"); if ($tag == 'PLAC') { if (preg_match_all('/(' . WT_REGEX_TAG . ')/', $ADVANCED_PLAC_FACTS, $match)) { foreach ($match[1] as $ptag) { add_simple_tag("3 {$ptag}", '', WT_Gedcom_Tag::getLabel("{$level1tag}:PLAC:{$ptag}")); } } add_simple_tag('3 MAP'); add_simple_tag('4 LATI'); add_simple_tag('4 LONG'); } } } } }