summaryrefslogtreecommitdiff
path: root/includes/classes/class_family.php
diff options
context:
space:
mode:
authorfisharebest <fisharebest@gmail.com>2011-01-01 10:46:42 +0000
committerfisharebest <fisharebest@gmail.com>2011-01-01 10:46:42 +0000
commit3f00e12930f917fcd52629041b942db9bec5f701 (patch)
tree7f29e3ba19d410454032317a7df98de212cdc550 /includes/classes/class_family.php
parent8bc6f5e19764516c1e997578ea04b08e77d182df (diff)
downloadwebtrees-3f00e12930f917fcd52629041b942db9bec5f701.tar.gz
webtrees-3f00e12930f917fcd52629041b942db9bec5f701.tar.bz2
webtrees-3f00e12930f917fcd52629041b942db9bec5f701.zip
Refactoring class names and use autoloading.
Diffstat (limited to 'includes/classes/class_family.php')
-rw-r--r--includes/classes/class_family.php432
1 files changed, 0 insertions, 432 deletions
diff --git a/includes/classes/class_family.php b/includes/classes/class_family.php
deleted file mode 100644
index 3750ddb06f..0000000000
--- a/includes/classes/class_family.php
+++ /dev/null
@@ -1,432 +0,0 @@
-<?php
-/**
- * Class file for a Family
- *
- * webtrees: Web based Family History software
- * Copyright (C) 2010 webtrees development team.
- *
- * Derived from PhpGedView
- * Copyright (C) 2002 to 2009 PGV Development Team. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * @package webtrees
- * @subpackage DataModel
- * @version $Id$
- */
-
-if (!defined('WT_WEBTREES')) {
- header('HTTP/1.0 403 Forbidden');
- exit;
-}
-
-define('WT_CLASS_FAMILY_PHP', '');
-
-require_once WT_ROOT.'includes/classes/class_gedcomrecord.php';
-
-class Family extends GedcomRecord {
- private $husb = null;
- private $wife = null;
- private $children = array();
- private $childrenIds = array();
- private $marriage = null;
- private $children_loaded = false;
- private $numChildren = false;
- private $_isDivorced = null;
- private $_isNotMarried = null;
-
- // Create a Family object from either raw GEDCOM data or a database row
- function __construct($data) {
- if (is_array($data)) {
- // Construct from a row from the database
- if ($data['f_husb']) {
- $this->husb=Person::getInstance($data['f_husb']);
- }
- if ($data['f_wife']) {
- $this->wife=Person::getInstance($data['f_wife']);
- }
- if (preg_match_all('/\n1 CHIL @('.WT_REGEX_XREF.')@/', $data['gedrec'], $matches)) {
- $this->childrenIds=$matches[1];
- }
- $this->numChildren=$data['f_numchil'];
- // Check for divorce, etc. *before* we privatize the data so
- // we can correctly label spouses/ex-spouses/partners
- $this->_isDivorced=(bool)preg_match('/\n1 ('.WT_EVENTS_DIV.')( Y|\n)/', $data['gedrec']);
- $this->_isNotMarried=(bool)preg_match('/\n1 _NMR( Y|\n)/', $data['gedrec']);
- } else {
- // Construct from raw GEDCOM data
- if (preg_match('/^1 HUSB @(.+)@/m', $data, $match)) {
- $this->husb=Person::getInstance($match[1]);
- }
- if (preg_match('/^1 WIFE @(.+)@/m', $data, $match)) {
- $this->wife=Person::getInstance($match[1]);
- }
- if (preg_match_all('/^1 CHIL @(.+)@/m', $data, $match)) {
- $this->childrenIds=$match[1];
- }
- if (preg_match('/^1 NCHI (\d+)/m', $data, $match)) {
- $this->numChildren=$match[1];
- } else {
- $this->numChildren=count($this->childrenIds);
- }
- // Check for divorce, etc. *before* we privatize the data so
- // we can correctly label spouses/ex-spouses/partners
- $this->_isDivorced=(bool)preg_match('/\n1 ('.WT_EVENTS_DIV.')( Y|\n)/', $data);
- $this->_isNotMarried=(bool)preg_match('/\n1 _NMR( Y|\n)/', $data);
- }
-
- // Make sure husb/wife are the right way round.
- if ($this->husb && $this->husb->getSex()=='F' || $this->wife && $this->wife->getSex()=='M') {
- list($this->husb, $this->wife)=array($this->wife, $this->husb);
- }
-
- parent::__construct($data);
- }
-
- /**
- * get the husbands ID
- * @return string
- */
- function getHusbId() {
- if (!is_null($this->husb)) return $this->husb->getXref();
- else return '';
- }
-
- /**
- * get the wife ID
- * @return string
- */
- function getWifeId() {
- if (!is_null($this->wife)) return $this->wife->getXref();
- else return '';
- }
-
- /**
- * get the husband's person object
- * @return Person
- */
- function &getHusband() {
- return $this->husb;
- }
- /**
- * get the wife's person object
- * @return Person
- */
- function &getWife() {
- return $this->wife;
- }
-
- /**
- * return the spouse of the given person
- * @param Person $person
- * @return Person
- */
- function &getSpouse(&$person) {
- if (is_null($this->wife) or is_null($this->husb)) return null;
- if ($this->wife->equals($person)) return $this->husb;
- if ($this->husb->equals($person)) return $this->wife;
- return null;
- }
-
- /**
- * return the spouse id of the given person id
- * @param string $pid
- * @return string
- */
- function getSpouseId($pid) {
- if (is_null($this->wife) or is_null($this->husb)) return null;
- if ($this->wife->getXref()==$pid) return $this->husb->getXref();
- if ($this->husb->getXref()==$pid) return $this->wife->getXref();
- return null;
- }
-
- /**
- * get the children
- * @return array array of children Persons
- */
- function getChildren() {
- if (!$this->children_loaded) $this->loadChildren();
- return $this->children;
- }
-
- /**
- * get the children ids
- * @return array array of children ids
- */
- function getChildrenIds() {
- if (!$this->children_loaded) $this->loadChildren();
- return $this->childrenIds;
- }
-
- // Static helper function to sort an array of families by marriage date
- static function CompareMarrDate($x, $y) {
- return GedcomDate::Compare($x->getMarriageDate(), $y->getMarriageDate());
- }
-
- /**
- * Load the children from the database
- * We used to load the children when the family was created, but that has performance issues
- * because we often don't need all the children
- * now, children are only loaded as needed
- */
- function loadChildren() {
- if ($this->children_loaded) return;
- $this->childrenIds = array();
- $this->numChildren = preg_match_all('/\n1 CHIL @('.WT_REGEX_XREF.')@/', $this->gedrec, $smatch, PREG_SET_ORDER);
- for ($i=0; $i<$this->numChildren; $i++) {
- $this->childrenIds[] = $smatch[$i][1];
- }
- foreach ($this->childrenIds as $t=>$chil) {
- $child=Person::getInstance($chil);
- if ($child) {
- $this->children[] = $child;
- }
- }
- $this->children_loaded = true;
- }
-
- /**
- * get the number of children in this family
- * @return int the number of children
- */
- function getNumberOfChildren() {
-
- $nchi1=(int)get_gedcom_value('NCHI', 1, $this->gedrec);
- $nchi2=(int)get_gedcom_value('NCHI', 2, $this->gedrec);
- $nchi3=preg_match_all('/\n1 CHIL @(.*)@/', $this->gedrec, $smatch);
- return $this->numChildren=max($nchi1, $nchi2, $nchi3);
- }
-
- /**
- * get updated Family
- * If there is an updated family record in the gedcom file
- * return a new family object for it
- */
- function getUpdatedFamily() {
- if ($this->getChanged()) {
- return $this;
- }
- if (WT_USER_CAN_EDIT && $this->canDisplayDetails()) {
- $newrec = find_updated_record($this->xref, $this->ged_id);
- if (!is_null($newrec)) {
- $newfamily = new Family($newrec);
- $newfamily->setChanged(true);
- return $newfamily;
- }
- }
- return null;
- }
- /**
- * check if this family has the given person
- * as a parent in the family
- * @param Person $person
- */
- function hasParent(&$person) {
- if (is_null($person)) return false;
- if ($person->equals($this->husb)) return true;
- if ($person->equals($this->wife)) return true;
- return false;
- }
- /**
- * check if this family has the given person
- * as a child in the family
- * @param Person $person
- */
- function hasChild(&$person) {
- if (is_null($person)) return false;
- $this->loadChildren();
- foreach ($this->children as $key=>$child) {
- if ($person->equals($child)) return true;
- }
- return false;
- }
-
- /**
- * parse marriage record
- */
- function _parseMarriageRecord() {
- $this->marriage = new Event(trim(get_sub_record(1, '1 MARR', $this->gedrec)), -1);
- $this->marriage->setParentObject($this);
- }
-
- /**
- * get the marriage event
- *
- * @return Event
- */
- function getMarriage() {
- if (is_null($this->marriage)) $this->_parseMarriageRecord();
- return $this->marriage;
- }
-
- /**
- * get marriage record
- * @return string
- */
- function getMarriageRecord() {
- if (is_null($this->marriage)) $this->_parseMarriageRecord();
- return $this->marriage->getGedcomRecord();
- }
-
- // Return whether or not this family ended in a divorce or was never married.
- // Note that this is calculated prior to privatizing the data, so we can
- // always distinguish spouses from ex-spouses. This apparant leaking of
- // private data was discussed and agreed on the pgv forum.
- function isDivorced() {
- return $this->_isDivorced;
- }
- function isNotMarried() {
- return $this->_isNotMarried;
- }
-
- /**
- * get marriage date
- * @return string
- */
- function getMarriageDate() {
- if (!$this->canDisplayDetails()) {
- return new GedcomDate('');
- }
- if (is_null($this->marriage)) {
- $this->_parseMarriageRecord();
- }
- return $this->marriage->getDate();
- }
-
- /**
- * get the marriage year
- * @return string
- */
- function getMarriageYear($est = true, $cal = '') {
- // TODO - change the design to use julian days, not gregorian years.
- $mdate = $this->getMarriageDate();
- $mdate = $mdate->MinDate();
- if ($cal) $mdate = $mdate->convert_to_cal($cal);
- return $mdate->y;
- }
-
- /**
- * get the marriage month
- * @return string
- */
- function getMarriageMonth($est = true, $cal = '') {
- // TODO - change the design to use julian days, not gregorian years.
- $mdate = $this->getMarriageDate();
- $mdate=$mdate->MinDate();
- if ($cal) $mdate = $mdate->convert_to_cal($cal);
- return $mdate->m;
- }
-
- /**
- * get the type for this marriage
- * @return string
- */
- function getMarriageType() {
- if (is_null($this->marriage)) $this->_parseMarriageRecord();
- return $this->marriage->getType();
- }
-
- /**
- * get the marriage place
- * @return string
- */
- function getMarriagePlace() {
- $marriage = $this->getMarriage();
- return $marriage->getPlace();
- }
-
- // Get all the dates/places for marriages - for the FAM lists
- function getAllMarriageDates() {
- if ($this->canDisplayDetails()) {
- foreach (explode('|', WT_EVENTS_MARR) as $event) {
- if ($array=$this->getAllEventDates($event)) {
- return $array;
- }
- }
- }
- return array();
- }
- function getAllMarriagePlaces() {
- if ($this->canDisplayDetails()) {
- foreach (explode('|', WT_EVENTS_MARR) as $event) {
- if ($array=$this->getAllEventPlaces($event)) {
- return $array;
- }
- }
- }
- return array();
- }
-
- // Generate a URL to this record, suitable for use in HTML
- public function getHtmlUrl() {
- return parent::_getLinkUrl('family.php?famid=', '&amp;');
- }
- // Generate a URL to this record, suitable for use in javascript, HTTP headers, etc.
- public function getRawUrl() {
- return parent::_getLinkUrl('family.php?famid=', '&');
- }
-
- // Get an array of structures containing all the names in the record
- public function getAllNames() {
- if (is_null($this->_getAllNames)) {
- $husb=$this->husb ? $this->husb : new Person('1 SEX M');
- $wife=$this->wife ? $this->wife : new Person('1 SEX F');
- // Check the script used by each name, so we can match cyrillic with cyrillic, greek with greek, etc.
- $husb_names=$husb->getAllNames();
- foreach ($husb_names as $n=>$husb_name) {
- $husb_names[$n]['script']=utf8_script($husb_name['surn']);
- }
- $wife_names=$wife->getAllNames();
- foreach ($wife_names as $n=>$wife_name) {
- $wife_names[$n]['script']=utf8_script($wife_name['surn']);
- }
- // Add the matched names first
- foreach ($husb_names as $husb_name) {
- foreach ($wife_names as $wife_name) {
- if ($husb_name['type']!='_MARNM' && $wife_name['type']!='_MARNM' && $husb_name['script']==$wife_name['script']) {
- $this->_getAllNames[]=array(
- 'type'=>$husb_name['type'],
- 'full'=>$husb_name['full'].' + '.$wife_name['full'],
- 'list'=>$husb_name['list'].$husb->getSexImage().'<br />'.$wife_name['list'].$wife->getSexImage(),
- 'sort'=>$husb_name['sort'].' + '.$wife_name['sort'],
- );
- }
- }
- }
- // Add the unmatched names second (there may be no matched names)
- foreach ($husb_names as $husb_name) {
- foreach ($wife_names as $wife_name) {
- if ($husb_name['type']!='_MARNM' && $wife_name['type']!='_MARNM' && $husb_name['script']!=$wife_name['script']) {
- $this->_getAllNames[]=array(
- 'type'=>$husb_name['type'],
- 'full'=>$husb_name['full'].' + '.$wife_name['full'],
- 'list'=>$husb_name['list'].$husb->getSexImage().'<br />'.$wife_name['list'].$wife->getSexImage(),
- 'sort'=>$husb_name['sort'].' + '.$wife_name['sort'],
- );
- }
- }
- }
- }
- return $this->_getAllNames;
- }
-
- // Extra info to display when displaying this record in a list of
- // selection items or favorites.
- function format_list_details() {
- return
- $this->format_first_major_fact(WT_EVENTS_MARR, 1).
- $this->format_first_major_fact(WT_EVENTS_DIV, 1);
- }
-}