gedcom_place=explode(self::GEDCOM_SEPARATOR, $gedcom_place);
} else {
// Empty => "Top Level"
$this->gedcom_place=array();
$this->place_id=0;
}
$this->gedcom_id=$gedcom_id;
}
public function getPlaceId() {
$place_id=0;
foreach (array_reverse($this->gedcom_place) as $place) {
$place_id=
WT_DB::prepare("SELECT SQL_CACHE p_id FROM `##places` WHERE p_parent_id=? AND p_place=? AND p_file=?")
->execute(array($place_id, $place, $this->gedcom_id))
->fetchOne();
}
return $place_id;
}
public function getParentPlace() {
return new WT_Place(implode(self::GEDCOM_SEPARATOR, array_slice($this->gedcom_place, 1)), $this->gedcom_id);
}
public function getChildPlaces() {
$children=array();
if ($this->getPlaceId()) {
$parent_text=self::GEDCOM_SEPARATOR . $this->getGedcomName();
} else {
$parent_text='';
}
$rows=
WT_DB::prepare("SELECT SQL_CACHE p_place FROM `##places` WHERE p_parent_id=? AND p_file=? ORDER BY p_place COLLATE '".WT_I18N::$collation."'")
->execute(array($this->getPlaceId(), $this->gedcom_id))
->fetchOneColumn();
foreach ($rows as $row) {
$children[]=new WT_Place($row . $parent_text, $this->gedcom_id);
}
return $children;
}
public function getURL() {
$url='placelist.php';
foreach (array_reverse($this->gedcom_place) as $n=>$place) {
$url.=$n ? '&' : '?';
$url.='parent%5B%5D='.rawurlencode($place);
}
$url.='&ged='.rawurlencode(get_gedcom_from_id($this->gedcom_id));
return $url;
}
public function getGedcomName() {
return implode(self::GEDCOM_SEPARATOR, $this->gedcom_place);
}
public function getPlaceName() {
$place=reset($this->gedcom_place);
return $place ? ''.htmlspecialchars($place).'' : WT_I18N::translate('unknown');
}
public function getFullName() {
$tmp=array();
foreach ($this->gedcom_place as $place) {
$tmp[]='' . htmlspecialchars($place) . '';
}
return implode(WT_I18N::$list_separator, $tmp);
}
// For lists and charts, where the full name won't fit.
public function getShortName() {
global $SHOW_PEDIGREE_PLACES, $SHOW_PEDIGREE_PLACES_SUFFIX;
if ($SHOW_PEDIGREE_PLACES >= count($this->gedcom_place)) {
// A short place name - no need to abbreviate
return $this->getFullName();
} else {
// Abbreviate the place name, for lists
if ($SHOW_PEDIGREE_PLACES_SUFFIX) {
// The *last* $SHOW_PEDIGREE_PLACES components
$short_name=implode(self::GEDCOM_SEPARATOR, array_slice($this->gedcom_place, -$SHOW_PEDIGREE_PLACES));
} else {
// The *first* $SHOW_PEDIGREE_PLACES components
$short_name=implode(self::GEDCOM_SEPARATOR, array_slice($this->gedcom_place, 0, $SHOW_PEDIGREE_PLACES));
}
// Add a tool-tip showing the full name
return ''.htmlspecialchars($short_name).'';
}
}
// For the "view all" option of placelist.php and find.php
public function getReverseName() {
$tmp=array();
foreach (array_reverse($this->gedcom_place) as $place) {
$tmp[]='' . htmlspecialchars($place) . '';
}
return implode(WT_I18N::$list_separator, $tmp);
}
public static function allPlaces($gedcom_id) {
$places=array();
$rows=
WT_DB::prepare(
"SELECT SQL_CACHE CONCAT_WS(', ', p1.p_place, p2.p_place, p3.p_place, p4.p_place, p5.p_place, p6.p_place, p7.p_place, p8.p_place, p9.p_place)".
" FROM `##places` AS p1".
" LEFT JOIN `##places` AS p2 ON (p1.p_parent_id=p2.p_id)".
" LEFT JOIN `##places` AS p3 ON (p2.p_parent_id=p3.p_id)".
" LEFT JOIN `##places` AS p4 ON (p3.p_parent_id=p4.p_id)".
" LEFT JOIN `##places` AS p5 ON (p4.p_parent_id=p5.p_id)".
" LEFT JOIN `##places` AS p6 ON (p5.p_parent_id=p6.p_id)".
" LEFT JOIN `##places` AS p7 ON (p6.p_parent_id=p7.p_id)".
" LEFT JOIN `##places` AS p8 ON (p7.p_parent_id=p8.p_id)".
" LEFT JOIN `##places` AS p9 ON (p8.p_parent_id=p9.p_id)".
" WHERE p1.p_file=?".
" ORDER BY CONCAT_WS(', ', p9.p_place, p8.p_place, p7.p_place, p6.p_place, p5.p_place, p4.p_place, p3.p_place, p2.p_place, p1.p_place) COLLATE '".WT_I18N::$collation."'"
)
->execute(array($gedcom_id))
->fetchOneColumn();
foreach ($rows as $row) {
$places[]=new WT_Place($row, $gedcom_id);
}
return $places;
}
public static function findPlaces($filter, $gedcom_id) {
$places=array();
$rows=
WT_DB::prepare(
"SELECT SQL_CACHE CONCAT_WS(', ', p1.p_place, p2.p_place, p3.p_place, p4.p_place, p5.p_place, p6.p_place, p7.p_place, p8.p_place, p9.p_place)".
" FROM `##places` AS p1".
" LEFT JOIN `##places` AS p2 ON (p1.p_parent_id=p2.p_id)".
" LEFT JOIN `##places` AS p3 ON (p2.p_parent_id=p3.p_id)".
" LEFT JOIN `##places` AS p4 ON (p3.p_parent_id=p4.p_id)".
" LEFT JOIN `##places` AS p5 ON (p4.p_parent_id=p5.p_id)".
" LEFT JOIN `##places` AS p6 ON (p5.p_parent_id=p6.p_id)".
" LEFT JOIN `##places` AS p7 ON (p6.p_parent_id=p7.p_id)".
" LEFT JOIN `##places` AS p8 ON (p7.p_parent_id=p8.p_id)".
" LEFT JOIN `##places` AS p9 ON (p8.p_parent_id=p9.p_id)".
" WHERE CONCAT_WS(', ', p1.p_place, p2.p_place, p3.p_place, p4.p_place, p5.p_place, p6.p_place, p7.p_place, p8.p_place, p9.p_place) LIKE CONCAT('%', ?, '%') AND CONCAT_WS(', ', p1.p_place, p2.p_place, p3.p_place, p4.p_place, p5.p_place, p6.p_place, p7.p_place, p8.p_place, p9.p_place) NOT LIKE CONCAT('%,%', ?, '%') AND p1.p_file=?".
" ORDER BY CONCAT_WS(', ', p1.p_place, p2.p_place, p3.p_place, p4.p_place, p5.p_place, p6.p_place, p7.p_place, p8.p_place, p9.p_place) COLLATE '".WT_I18N::$collation."'"
)
->execute(array($filter, $filter, $gedcom_id))
->fetchOneColumn();
foreach ($rows as $row) {
$places[]=new WT_Place($row, $gedcom_id);
}
return $places;
}
}