コード例 #1
0
ファイル: Functions.php プロジェクト: jflash/webtrees
 /**
  * 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'];
     }
 }
コード例 #2
0
 /**
  * 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;
 }
コード例 #3
0
 /**
  * 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);
 }
コード例 #4
0
 /**
  * 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;
     }
 }