0) { $retStr = ' '; $levels = explode(',', $match[1]); $place = trim($match[1]); // reverse the array so that we get the top level first $levels = array_reverse($levels); $retStr .= ''; return $retStr; } return ''; } function print_address_structure_map($factrec, $level) { global $WORD_WRAPPED_NOTES; global $POSTAL_CODE; // $POSTAL_CODE = 'false' - before city, 'true' - after city and/or state //-- define per gedcom till can do per address countries in address languages //-- then this will be the default when country not recognized or does not exist //-- both Finland and Suomi are valid for Finland etc. //-- see http://www.bitboost.com/ref/international-address-formats.html $nlevel = $level+1; $ct = preg_match_all("/$level ADDR(.*)/", $factrec, $omatch, PREG_SET_ORDER); for ($i=0; $i<$ct; $i++) { $arec = get_sub_record($level, "$level ADDR", $factrec, $i+1); $resultText = ''; $cn = preg_match("/$nlevel _NAME (.*)/", $arec, $cmatch); if ($cn>0) $resultText .= str_replace("/", "", $cmatch[1]).'
'; $resultText .= PrintReady(trim($omatch[$i][1])); $cont = get_cont($nlevel, $arec); if (!empty($cont)) $resultText .= str_replace(array(' ', " 0) echo '
'; $cs = preg_match("/$nlevel ADR1 (.*)/", $arec, $cmatch); if ($cs>0) { if ($cn==0) { $resultText .= '
'; $cn=0; } $resultText .= PrintReady($cmatch[1]); } $cs = preg_match("/$nlevel ADR2 (.*)/", $arec, $cmatch); if ($cs>0) { if ($cn==0) { $resultText .= '
'; $cn=0; } $resultText .= PrintReady($cmatch[1]); } if ($POSTAL_CODE) { if (preg_match("/$nlevel CITY (.*)/", $arec, $cmatch)) $resultText.=' '.PrintReady($cmatch[1]); if (preg_match("/$nlevel STAE (.*)/", $arec, $cmatch)) $resultText.=', '.PrintReady($cmatch[1]); if (preg_match("/$nlevel POST (.*)/", $arec, $cmatch)) $resultText.='
'.PrintReady($cmatch[1]); } else { if (preg_match("/$nlevel POST (.*)/", $arec, $cmatch)) $resultText.='
'.PrintReady($cmatch[1]); if (preg_match("/$nlevel CITY (.*)/", $arec, $cmatch)) $resultText.=' '.PrintReady($cmatch[1]); if (preg_match("/$nlevel STAE (.*)/", $arec, $cmatch)) $resultText.=', '.PrintReady($cmatch[1]); } } if (preg_match("/$nlevel CTRY (.*)/", $arec, $cmatch)) $resultText.='
'.PrintReady($cmatch[1]); $resultText.= '
'; // Here we can examine the resultant text and remove empty tags echo str_replace(chr(10), ' ' , $resultText); } $resultText = ""; $ct = preg_match_all("/$level PHON (.*)/", $factrec, $omatch, PREG_SET_ORDER); for ($i=0; $i<$ct; $i++) { $resultText .= ''; } $ct = preg_match_all("/$level FAX (.*)/", $factrec, $omatch, PREG_SET_ORDER); for ($i=0; $i<$ct; $i++) { $resultText .= ''; } $ct = preg_match_all("/$level EMAIL (.*)/", $factrec, $omatch, PREG_SET_ORDER); for ($i=0; $i<$ct; $i++) { $resultText .= ''; } $ct = preg_match_all("/$level (WWW|URL) (.*)/", $factrec, $omatch, PREG_SET_ORDER); for ($i=0; $i<$ct; $i++) { $resultText .= ''; } $resultText .= '
'.WT_Gedcom_Tag::getLabel('PHON').': '; $resultText .= getLRM() . $omatch[$i][1]. getLRM(); $resultText .= '
'.WT_Gedcom_Tag::getLabel('FAX').': '; $resultText .= getLRM() . $omatch[$i][1] . getLRM(); $resultText .= '
'.WT_Gedcom_Tag::getLabel('EMAIL').': '; $resultText .= ''.$omatch[$i][1].''; $resultText .= '
'.WT_Gedcom_Tag::getLabel('URL').': '; $resultText .= ''.$omatch[$i][2].''; $resultText .= '
'; if ($resultText!='
') echo str_replace(chr(10), ' ' , $resultText); } function rem_prefix_from_placename($prefix_list, $place, &$placelist) { $prefix_split = explode(';', $prefix_list); foreach ($prefix_split as $prefix) { if ($prefix && substr($place, 0, strlen($prefix)+1)==$prefix.' ') { $placelist[] = substr($place, strlen($prefix)+1); } } return $placelist; } function rem_postfix_from_placename($postfix_list, $place, &$placelist) { $postfix_split = explode (';', $postfix_list); foreach ($postfix_split as $postfix) { if ($postfix && substr($place, -strlen($postfix)-1)==' '.$postfix) { $placelist[] = substr($place, 0, strlen($place)-strlen($postfix)-1); } } return $placelist; } function rem_prefix_postfix_from_placename($prefix_list, $postfix_list, $place, &$placelist) { $prefix_split = explode (";", $prefix_list); $postfix_split = explode (";", $postfix_list); foreach ($prefix_split as $prefix) { foreach ($postfix_split as $postfix) { if ($prefix && $postfix && substr($place, 0, strlen($prefix)+1)==$prefix.' ' && substr($place, -strlen($postfix)-1)==' '.$postfix) { $placelist[] = substr($place, strlen($prefix)+1, strlen($place)-strlen($prefix)-strlen($postfix)-2); } } } return $placelist; } function create_possible_place_names ($placename, $level) { global $GM_PREFIX, $GM_POSTFIX, $GM_PRE_POST_MODE; $retlist = array(); switch (@$GM_PRE_POST_MODE[$level]) { case 0: // 0: no pre/postfix $retlist[] = $placename; break; case 1: // 1 = Normal name, Prefix, Postfix, Both $retlist[] = $placename; $retlist = rem_prefix_from_placename($GM_PREFIX[$level], $placename, $retlist); $retlist = rem_postfix_from_placename($GM_POSTFIX[$level], $placename, $retlist); $retlist = rem_prefix_postfix_from_placename($GM_PREFIX[$level], $GM_POSTFIX[$level], $placename, $retlist); break; case 2: // 2 = Normal name, Postfix, Prefix, Both $retlist[] = $placename; $retlist = rem_postfix_from_placename($GM_POSTFIX[$level], $placename, $retlist); $retlist = rem_prefix_from_placename($GM_PREFIX[$level], $placename, $retlist); $retlist = rem_prefix_postfix_from_placename($GM_PREFIX[$level], $GM_POSTFIX[$level], $placename, $retlist); break; case 3: // 3 = Prefix, Postfix, Both, Normal name $retlist = rem_prefix_from_placename($GM_PREFIX[$level], $placename, $retlist); $retlist = rem_postfix_from_placename($GM_POSTFIX[$level], $placename, $retlist); $retlist = rem_prefix_postfix_from_placename($GM_PREFIX[$level], $GM_POSTFIX[$level], $placename, $retlist); $retlist[] = $placename; break; case 4: // 4 = Postfix, Prefix, Both, Normal name $retlist = rem_postfix_from_placename($GM_POSTFIX[$level], $placename, $retlist); $retlist = rem_prefix_from_placename($GM_PREFIX[$level], $placename, $retlist); $retlist = rem_prefix_postfix_from_placename($GM_PREFIX[$level], $GM_POSTFIX[$level], $placename, $retlist); $retlist[] = $placename; break; case 5: // 5 = Prefix, Postfix, Normal name, Both $retlist = rem_prefix_from_placename($GM_PREFIX[$level], $placename, $retlist); $retlist = rem_postfix_from_placename($GM_POSTFIX[$level], $placename, $retlist); $retlist[] = $placename; $retlist = rem_prefix_postfix_from_placename($GM_PREFIX[$level], $GM_POSTFIX[$level], $placename, $retlist); break; case 6: // 6 = Postfix, Prefix, Normal name, Both $retlist = rem_postfix_from_placename($GM_POSTFIX[$level], $placename, $retlist); $retlist = rem_prefix_from_placename($GM_PREFIX[$level], $placename, $retlist); $retlist[] = $placename; $retlist = rem_prefix_postfix_from_placename($GM_PREFIX[$level], $GM_POSTFIX[$level], $placename, $retlist); break; } return $retlist; } function abbreviate($text) { if (utf8_strlen($text)>13) { if (trim(utf8_substr($text, 10, 1))!='') { $desc = utf8_substr($text, 0, 11).'.'; } else { $desc = trim(utf8_substr($text, 0, 11)); } } else $desc = $text; return $desc; } function get_lati_long_placelocation ($place) { $parent = explode (',', $place); $parent = array_reverse($parent); $place_id = 0; for ($i=0; $i $placename) { $pl_id= WT_DB::prepare("SELECT pl_id FROM `##placelocation` WHERE pl_level=? AND pl_parent_id=? AND pl_place LIKE ? ORDER BY pl_place") ->execute(array($i, $place_id, $placename)) ->fetchOne(); if (!empty($pl_id)) break; } if (empty($pl_id)) break; $place_id = $pl_id; } $row= // WT_DB::prepare("SELECT pl_lati, pl_long, pl_zoom, pl_icon, pl_level FROM `##placelocation` WHERE pl_id=? ORDER BY pl_place") WT_DB::prepare("SELECT pl_media, sv_lati, sv_long, sv_bearing, sv_elevation, sv_zoom, pl_lati, pl_long, pl_zoom, pl_icon, pl_level FROM `##placelocation` WHERE pl_id=? ORDER BY pl_place") ->execute(array($place_id)) ->fetchOneRow(); if ($row) { return array('media'=>$row->pl_media, 'sv_lati'=>$row->sv_lati, 'sv_long'=>$row->sv_long, 'sv_bearing'=>$row->sv_bearing, 'sv_elevation'=>$row->sv_elevation, 'sv_zoom'=>$row->sv_zoom, 'lati'=>$row->pl_lati, 'long'=>$row->pl_long, 'zoom'=>$row->pl_zoom, 'icon'=>$row->pl_icon, 'level'=>$row->pl_level); } else { return array(); } } function setup_map() { global $GOOGLEMAP_MAP_TYPE, $GOOGLEMAP_MIN_ZOOM, $GOOGLEMAP_MAX_ZOOM; ?> $value) { $fact = $value->getTag(); $fact_data=$value->getDetail(); $factrec = $value->getGedComRecord(); $placerec = null; if ($value->getPlace()!=null) { $placerec = get_sub_record(2, '2 PLAC', $factrec); $addrFound = false; } else { if (preg_match("/\d ADDR (.*)/", $factrec, $match)) { $placerec = get_sub_record(1, "\d ADDR", $factrec); $addrFound = true; } } if (!empty($placerec)) { $ctla = preg_match("/\d LATI (.*)/", $placerec, $match1); $ctlo = preg_match("/\d LONG (.*)/", $placerec, $match2); $spouserec = get_sub_record(2, '2 _WTS', $factrec); $ctlp = preg_match("/\d _WTS @(.*)@/", $spouserec, $spouseid); if ($ctlp>0) { $useThisItem = WT_Family::getInstance($spouseid[1])->canDisplayDetails(); } else { $useThisItem = true; } if (($ctla>0) && ($ctlo>0) && ($useThisItem==true)) { $i = $i + 1; $markers[$i]=array('class'=>'optionbox', 'index'=>'', 'tabindex'=>'', 'placed'=>'no'); if ($fact == "EVEN" || $fact=="FACT") { $eventrec = get_sub_record(1, '2 TYPE', $factrec); if (preg_match("/\d TYPE (.*)/", $eventrec, $match3)) { $markers[$i]['fact']=$match3[1]; } else { $markers[$i]['fact']=WT_Gedcom_Tag::getLabel($fact); } } else { $markers[$i]['fact']=WT_Gedcom_Tag::getLabel($fact); } if (!empty($fact_data) && $fact_data!='Y') { $markers[$i]['info'] = $fact_data; } $markers[$i]['placerec'] = $placerec; $match1[1] = trim($match1[1]); $match2[1] = trim($match2[1]); $markers[$i]['lati'] = str_replace(array('N', 'S', ','), array('', '-', '.') , $match1[1]); $markers[$i]['lng'] = str_replace(array('E', 'W', ','), array('', '-', '.') , $match2[1]); $ctd = preg_match("/2 DATE (.+)/", $factrec, $match); if ($ctd>0) { $markers[$i]['date'] = $match[1]; } if ($ctlp>0) { $markers[$i]['name']=$spouseid[1]; } } else { if ($useThisItem==true && $addrFound==false) { $ctpl = preg_match("/\d PLAC (.*)/", $placerec, $match1); $latlongval = get_lati_long_placelocation($match1[1]); if ((count($latlongval) == 0) && (!empty($GM_DEFAULT_TOP_VALUE))) { $latlongval = get_lati_long_placelocation($match1[1].', '.$GM_DEFAULT_TOP_VALUE); if ((count($latlongval) != 0) && ($latlongval['level'] == 0)) { $latlongval['lati'] = NULL; $latlongval['long'] = NULL; } } if ((count($latlongval) != 0) && ($latlongval['lati'] != NULL) && ($latlongval['long'] != NULL)) { $i = $i + 1; $markers[$i]=array('class'=>'optionbox', 'index'=>'', 'tabindex'=>'', 'placed'=>'no'); if ($fact == "EVEN" || $fact=="FACT") { $eventrec = get_sub_record(1, '2 TYPE', $factrec); if (preg_match("/\d TYPE (.*)/", $eventrec, $match3)) { $markers[$i]['fact']=$match3[1]; } else { $markers[$i]['fact']=WT_Gedcom_Tag::getLabel($fact); } } else { $markers[$i]['fact']=WT_Gedcom_Tag::getLabel($fact); } if (!empty($fact_data) && $fact_data!='Y') { $markers[$i]['info'] = $fact_data; } $markers[$i]['icon'] = $latlongval['icon']; $markers[$i]['placerec'] = $placerec; if ($zoomLevel > $latlongval['zoom']) { $zoomLevel = $latlongval['zoom']; } $markers[$i]['lati'] = str_replace(array('N', 'S', ','), array('', '-', '.') , $latlongval['lati']); $markers[$i]['lng'] = str_replace(array('E', 'W', ','), array('', '-', '.') , $latlongval['long']); $markers[$i]['media'] = $latlongval['media']; $markers[$i]['sv_lati'] = $latlongval['sv_lati']; $markers[$i]['sv_long'] = $latlongval['sv_long']; $markers[$i]['sv_bearing'] = $latlongval['sv_bearing']; $markers[$i]['sv_elevation'] = $latlongval['sv_elevation']; $markers[$i]['sv_zoom'] = $latlongval['sv_zoom']; $ctd = preg_match("/2 DATE (.+)/", $factrec, $match); if ($ctd>0) { $markers[$i]['date'] = $match[1]; } if ($ctlp>0) { $markers[$i]['name']=$spouseid[1]; } } } } } } // Add children to the markers list array ====================================================== if (count($famids)>0) { $hparents=false; for ($f=0; $fcanDisplayDetails()) { $srec = find_person_record($smatch[$j][1], WT_GED_ID); $birthrec = ''; $placerec = ''; foreach ($person->getAllFactsByType('BIRT') as $sEvent) { $birthrec = $sEvent->getGedcomRecord(); $placerec = get_sub_record(2, '2 PLAC', $birthrec); if (!empty($placerec)) { $ctd = preg_match("/\d DATE (.*)/", $birthrec, $matchd); $ctla = preg_match("/\d LATI (.*)/", $placerec, $match1); $ctlo = preg_match("/\d LONG (.*)/", $placerec, $match2); if (($ctla>0) && ($ctlo>0)) { $i = $i + 1; $markers[$i]=array('index'=>'', 'tabindex'=>'', 'placed'=>'no'); if (strpos($srec, "\n1 SEX F")!==false) { $markers[$i]['fact'] = WT_I18N::translate('daughter'); $markers[$i]['class'] = 'person_boxF'; } else { if (strpos($srec, "\n1 SEX M")!==false) { $markers[$i]['fact'] = WT_I18N::translate('son'); $markers[$i]['class'] = 'person_box'; } else { $markers[$i]['fact'] = WT_I18N::translate('child'); $markers[$i]['class'] = 'person_boxNN'; } } $markers[$i]['placerec'] = $placerec; $match1[1] = trim($match1[1]); $match2[1] = trim($match2[1]); $markers[$i]['lati'] = str_replace(array('N', 'S', ','), array('', '-', '.'), $match1[1]); $markers[$i]['lng'] = str_replace(array('E', 'W', ','), array('', '-', '.'), $match2[1]); if ($ctd > 0) { $markers[$i]['date'] = $matchd[1]; } $markers[$i]['name'] = $smatch[$j][1]; } else { $ctpl = preg_match("/\d PLAC (.*)/", $placerec, $match1); $latlongval = get_lati_long_placelocation($match1[1]); if ((count($latlongval) == 0) && (!empty($GM_DEFAULT_TOP_VALUE))) { $latlongval = get_lati_long_placelocation($match1[1].', '.$GM_DEFAULT_TOP_VALUE); if ((count($latlongval) != 0) && ($latlongval['level'] == 0)) { $latlongval['lati'] = NULL; $latlongval['long'] = NULL; } } if ((count($latlongval) != 0) && ($latlongval['lati'] != NULL) && ($latlongval['long'] != NULL)) { $i = $i + 1; $markers[$i]=array('index'=>'', 'tabindex'=>'', 'placed'=>'no'); $markers[$i]['fact'] = WT_I18N::translate('child'); $markers[$i]['class'] = 'option_boxNN'; if (strpos($srec, "\n1 SEX F")!==false) { $markers[$i]['fact'] = WT_I18N::translate('daughter'); $markers[$i]['class'] = 'person_boxF'; } if (strpos($srec, "\n1 SEX M")!==false) { $markers[$i]['fact'] = WT_I18N::translate('son'); $markers[$i]['class'] = 'person_box'; } $markers[$i]['icon'] = $latlongval['icon']; $markers[$i]['placerec'] = $placerec; if ($zoomLevel > $latlongval['zoom']) { $zoomLevel = $latlongval['zoom']; } $markers[$i]['lati'] = str_replace(array('N', 'S', ','), array('', '-', '.'), $latlongval['lati']); $markers[$i]['lng'] = str_replace(array('E', 'W', ','), array('', '-', '.'), $latlongval['long']); if ($ctd > 0) { $markers[$i]['date'] = $matchd[1]; } $markers[$i]['name'] = $smatch[$j][1]; $markers[$i]['media'] = $latlongval['media']; $markers[$i]['sv_lati'] = $latlongval['sv_lati']; $markers[$i]['sv_long'] = $latlongval['sv_long']; $markers[$i]['sv_bearing'] = $latlongval['sv_bearing']; $markers[$i]['sv_elevation'] = $latlongval['sv_elevation']; $markers[$i]['sv_zoom'] = $latlongval['sv_zoom']; } } } } } } } } } } // Prepare the $markers array for use by the following "required" file/files =================== if ($i == 0) { echo ''; echo ''; if (WT_USER_IS_ADMIN) { echo ''; } } else { $indexcounter = 0; for ($j=1; $j<=$i; $j++) { if ($markers[$j]['placed'] == 'no') { $multimarker = -1; // Count nr of locations where the long/lati is identical for ($k=$j; $k<=$i; $k++) { if (($markers[$j]['lati'] == $markers[$k]['lati']) && ($markers[$j]['lng'] == $markers[$k]['lng'])) { $multimarker = $multimarker + 1; } } // If only one location with this long/lati combination if ($multimarker == 0) { // --- NOTE for V3 api, following line is changed from "yes" to "no" ----------- // --- This aids in identifying multi-event locations $markers[$j]['placed'] = 'no'; // ----------------------------------------------------------------------------- $markers[$j]['index'] = $indexcounter; $markers[$j]['tabindex'] = 0; $indexcounter = $indexcounter + 1; } else { $tabcounter = 0; $markersindex = 0; $markers[$j]['placed'] = 'yes'; $markers[$j]['index'] = $indexcounter; $markers[$j]['tabindex'] = $tabcounter; $tabcounter = $tabcounter + 1; for ($k=$j+1; $k<=$i; $k++) { if (($markers[$j]['lati'] == $markers[$k]['lati']) && ($markers[$j]['lng'] == $markers[$k]['lng'])) { $markers[$k]['placed'] = 'yes'; $markers[$k]['index'] = $indexcounter; // if ($tabcounter == 4) { // V3 ============================== if ($tabcounter == 30) { // V3 ============================== $indexcounter = $indexcounter + 1; $tabcounter = 0; $markersindex = $markersindex + 1; } $markers[$k]['index'] = $indexcounter; $markers[$k]['tabindex'] = $tabcounter; $tabcounter = $tabcounter + 1; } } $indexcounter = $indexcounter + 1; } } } // === add $gmarks array to the required wt_v3_googlemap.js.php ============================ $gmarks = $markers; global $controller; $pid=$controller->record->getXref(); // === Include css and js files ============================================================ echo ''; require_once WT_ROOT.WT_MODULES_DIR.'googlemap/wt_v3_googlemap.js.php'; // === Create the normal googlemap sidebar of events and children ========================== echo '
', WT_I18N::translate('No map data for this person'); echo '
'; echo '', WT_I18N::translate('Google Maps configuration'), ''; echo '
'; $z=0; foreach($markers as $marker) { echo ''; echo ''; $z++; echo ''; echo ''; } echo '
'; echo '', $marker['fact'], ''; if (!empty($marker['info'])) { echo '', $marker['info'], '
'; } if (!empty($marker['name'])) { $person=WT_Person::getInstance($marker['name']); if ($person) { echo '', $person->getFullName(), ''; } echo '
'; } if (preg_match("/2 PLAC (.*)/", $marker['placerec']) == 0) { print_address_structure_map($marker['placerec'], 1); } else { echo print_fact_place_map($marker['placerec']), '
'; } if (!empty($marker['date'])) { $date=new WT_Date($marker['date']); echo $date->Display(true), '
'; } echo '

'; } // end prepare markers array ================================================================= // ======= More V3 api stuff (not displayed now) but will be sorted later ========== ?>
Street View Only:   Pedigree Map:    Parents:    Grandparents:    Great Grandparents:
*/ ?>
'; return $i; } // end build_indiv_map function