/** * Static method to Compare two events by their type * * @param Event $a * @param Event $b * @return int */ static function CompareType(&$a, &$b) { global $factsort; if (empty($factsort)) { $factsort = array_flip(array("BIRT", "_HNM", "ALIA", "_AKA", "_AKAN", "ADOP", "_ADPF", "_ADPF", "_BRTM", "CHR", "BAPM", "FCOM", "CONF", "BARM", "BASM", "EDUC", "GRAD", "_DEG", "EMIG", "IMMI", "NATU", "_MILI", "_MILT", "ENGA", "MARB", "MARC", "MARL", "_MARI", "_MBON", "MARR", "MARR_CIVIL", "MARR_RELIGIOUS", "MARR_PARTNERS", "MARR_UNKNOWN", "_COML", "_STAT", "_SEPR", "DIVF", "MARS", "_BIRT_CHIL", "DIV", "ANUL", "_BIRT_", "_MARR_", "_DEAT_", "_BURI_", "CENS", "OCCU", "RESI", "PROP", "CHRA", "RETI", "FACT", "EVEN", "_NMR", "_NMAR", "NMR", "NCHI", "WILL", "_HOL", "_????_", "DEAT", "CAUS", "_FNRL", "BURI", "CREM", "_INTE", "CEME", "_YART", "_NLIV", "PROB", "TITL", "COMM", "NATI", "CITN", "CAST", "RELI", "SSN", "IDNO", "TEMP", "SLGC", "BAPL", "CONL", "ENDL", "SLGS", "AFN", "REFN", "_PRMN", "REF", "RIN", "ADDR", "PHON", "EMAIL", "_EMAIL", "EMAL", "FAX", "WWW", "URL", "_URL", "CHAN", "_TODO")); } // Facts from same families stay grouped together // Keep MARR and DIV from the same families from mixing with events from other FAMs // Use the original order in which the facts were added if ($a->getFamilyId() && $b->getFamilyId() && $a->getFamilyId() != $b->getFamilyId()) { return $a->sortOrder - $b->sortOrder; } $atag = $a->getTag(); $btag = $b->getTag(); // Events not in the above list get mapped onto one that is. if (!array_key_exists($atag, $factsort)) { if (preg_match('/^(_(BIRT|MARR|DEAT|BURI)_)/', $atag, $match)) { $atag = $match[1]; } else { $atag = "_????_"; } } if (!array_key_exists($btag, $factsort)) { if (preg_match('/^(_(BIRT|MARR|DEAT|BURI)_)/', $btag, $match)) { $btag = $match[1]; } else { $btag = "_????_"; } } //-- don't let dated after DEAT/BURI facts sort non-dated facts before DEAT/BURI //-- treat dated after BURI facts as BURI instead if ($a->getValue('DATE') != NULL && $factsort[$atag] > $factsort['BURI'] && $factsort[$atag] < $factsort['CHAN']) { $atag = 'BURI'; } if ($b->getValue('DATE') != NULL && $factsort[$btag] > $factsort['BURI'] && $factsort[$btag] < $factsort['CHAN']) { $btag = 'BURI'; } $ret = $factsort[$atag] - $factsort[$btag]; //-- if facts are the same then put dated facts before non-dated facts if ($ret == 0) { if ($a->getValue('DATE') != NULL && $b->getValue('DATE') == NULL) { return -1; } if ($b->getValue('DATE') != NULL && $a->getValue('DATE') == NULL) { return 1; } //-- if no sorting preference, then keep original ordering $ret = $a->sortOrder - $b->sortOrder; } return $ret; }
/** * Parse the facts from the record */ function parseFacts($nfacts = NULL) { //-- only run this function once if (!is_null($this->facts) && is_array($this->facts)) { return; } $this->facts = array(); //-- don't run this function if privacy does not allow viewing of details if (!$this->canDisplayDetails()) { return; } //-- must trim the record here because the record is trimmed in edit and it could mess up line numbers $this->gedrec = trim($this->gedrec); //-- find all the fact information $indilines = explode("\n", $this->gedrec); // -- find the number of lines in the individuals record $lct = count($indilines); $factrec = ''; // -- complete fact record $line = ''; // -- temporary line buffer $linenum = 1; for ($i = 1; $i <= $lct; $i++) { if ($i < $lct) { $line = $indilines[$i]; } else { $line = ' '; } if (empty($line)) { $line = ' '; } if ($i == $lct || $line[0] == 1) { if ($i > 1) { $event = new Event($factrec, $linenum); $fact = $event->getTag(); if ($nfacts == NULL || !in_array($fact, $nfacts)) { $event->setParentObject($this); $this->facts[] = $event; } } $factrec = $line; $linenum = $i; } else { $factrec .= "\n" . $line; } } }