/** * Sort a list events for the today/upcoming blocks * * @param array $a * @param array $b * * @return int */ public static function eventSortName($a, $b) { if ($a['jd'] == $b['jd']) { return GedcomRecord::compare($a['record'], $b['record']); } else { return $a['jd'] - $b['jd']; } }
/** * Print a list of events * * This performs the same function as print_events_table(), but formats the output differently. * * @param int $startjd * @param int $endjd * @param string $events * @param bool $only_living * @param string $sort_by * * @return string */ public static function eventsList($startjd, $endjd, $events = 'BIRT MARR DEAT', $only_living = false, $sort_by = 'anniv') { global $WT_TREE; // Did we have any output? Did we skip anything? $output = 0; $filter = 0; $filtered_events = array(); $html = ''; foreach (FunctionsDb::getEventsList($startjd, $endjd, $events, $WT_TREE) as $fact) { $record = $fact->getParent(); //-- only living people ? if ($only_living) { if ($record instanceof Individual && $record->isDead()) { $filter++; continue; } if ($record instanceof Family) { $husb = $record->getHusband(); if (is_null($husb) || $husb->isDead()) { $filter++; continue; } $wife = $record->getWife(); if (is_null($wife) || $wife->isDead()) { $filter++; continue; } } } $output++; $filtered_events[] = $fact; } // Now we've filtered the list, we can sort by event, if required switch ($sort_by) { case 'anniv': // Data is already sorted by anniversary date break; case 'alpha': uasort($filtered_events, function (Fact $x, Fact $y) { return GedcomRecord::compare($x->getParent(), $y->getParent()); }); break; } foreach ($filtered_events as $fact) { $record = $fact->getParent(); $html .= '<a href="' . $record->getHtmlUrl() . '" class="list_item name2">' . $record->getFullName() . '</a>'; if ($record instanceof Individual) { $html .= $record->getSexImage(); } $html .= '<br><div class="indent">'; $html .= $fact->getLabel() . ' — ' . $fact->getDate()->display(true); if ($fact->anniv) { $html .= ' (' . I18N::translate('%s year anniversary', I18N::number($fact->anniv)) . ')'; } if (!$fact->getPlace()->isEmpty()) { $html .= ' — <a href="' . $fact->getPlace()->getURL() . '">' . $fact->getPlace()->getFullName() . '</a>'; } $html .= '</div>'; } // Print a final summary message about restricted/filtered facts $summary = ''; if ($endjd == WT_CLIENT_JD) { // We're dealing with the Today’s Events block if ($output == 0) { if ($filter == 0) { $summary = I18N::translate('No events exist for today.'); } else { $summary = I18N::translate('No events for living individuals exist for today.'); } } } else { // We're dealing with the Upcoming Events block if ($output == 0) { if ($filter == 0) { if ($endjd == $startjd) { $summary = I18N::translate('No events exist for tomorrow.'); } else { // I18N: translation for %s==1 is unused; it is translated separately as “tomorrow” $summary = I18N::plural('No events exist for the next %s day.', 'No events exist for the next %s days.', $endjd - $startjd + 1, I18N::number($endjd - $startjd + 1)); } } else { if ($endjd == $startjd) { $summary = I18N::translate('No events for living individuals exist for tomorrow.'); } else { // I18N: translation for %s==1 is unused; it is translated separately as “tomorrow” $summary = I18N::plural('No events for living people exist for the next %s day.', 'No events for living people exist for the next %s days.', $endjd - $startjd + 1, I18N::number($endjd - $startjd + 1)); } } } } if ($summary) { $html .= "<b>" . $summary . "</b>"; } return $html; }
/** * Sort the records by (1) name and (2) last change date * * @param GedcomRecord $a * @param GedcomRecord $b * * @return int */ private static function sortByNameAndChangeDate(GedcomRecord $a, GedcomRecord $b) { return GedcomRecord::compare($a, $b) ?: $b->lastChangeTimestamp(true) - $a->lastChangeTimestamp(true); }
/** * Helper function to sort records by type/name * * @param string $a * @param string $b * * @return int */ private static function compareClippings($a, $b) { global $WT_TREE; $a = GedcomRecord::getInstance($a, $WT_TREE); $b = GedcomRecord::getInstance($b, $WT_TREE); if ($a && $b) { switch ($a::RECORD_TYPE) { case 'INDI': $t1 = 1; break; case 'FAM': $t1 = 2; break; case 'SOUR': $t1 = 3; break; case 'REPO': $t1 = 4; break; case 'OBJE': $t1 = 5; break; case 'NOTE': $t1 = 6; break; default: $t1 = 7; break; } switch ($b::RECORD_TYPE) { case 'INDI': $t2 = 1; break; case 'FAM': $t2 = 2; break; case 'SOUR': $t2 = 3; break; case 'REPO': $t2 = 4; break; case 'OBJE': $t2 = 5; break; case 'NOTE': $t2 = 6; break; default: $t2 = 7; break; } if ($t1 != $t2) { return $t1 - $t2; } else { return GedcomRecord::compare($a, $b); } } else { return 0; } }