Fisharebest\Webtrees\Functions\FunctionsPrintLists::eventsList PHP Method

eventsList() public static method

This performs the same function as print_events_table(), but formats the output differently.
public static eventsList ( integer $startjd, integer $endjd, string $events = 'BIRT MARR DEAT', boolean $only_living = false, string $sort_by = 'anniv' ) : string
$startjd integer
$endjd integer
$events string
$only_living boolean
$sort_by string
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;
    }

Usage Example

 /**
  * Generate the HTML content of this block.
  *
  * @param int      $block_id
  * @param bool     $template
  * @param string[] $cfg
  *
  * @return string
  */
 public function getBlock($block_id, $template = true, $cfg = array())
 {
     global $ctype, $WT_TREE;
     $days = $this->getBlockSetting($block_id, 'days', '7');
     $filter = $this->getBlockSetting($block_id, 'filter', '1');
     $onlyBDM = $this->getBlockSetting($block_id, 'onlyBDM', '0');
     $infoStyle = $this->getBlockSetting($block_id, 'infoStyle', 'table');
     $sortStyle = $this->getBlockSetting($block_id, 'sortStyle', 'alpha');
     $block = $this->getBlockSetting($block_id, 'block', '1');
     foreach (array('days', 'filter', 'onlyBDM', 'infoStyle', 'sortStyle', 'block') as $name) {
         if (array_key_exists($name, $cfg)) {
             ${$name} = $cfg[$name];
         }
     }
     $startjd = WT_CLIENT_JD + 1;
     $endjd = WT_CLIENT_JD + $days;
     $id = $this->getName() . $block_id;
     $class = $this->getName() . '_block';
     if ($ctype === 'gedcom' && Auth::isManager($WT_TREE) || $ctype === 'user' && Auth::check()) {
         $title = '<a class="icon-admin" title="' . I18N::translate('Preferences') . '" href="block_edit.php?block_id=' . $block_id . '&amp;ged=' . $WT_TREE->getNameHtml() . '&amp;ctype=' . $ctype . '"></a>';
     } else {
         $title = '';
     }
     $title .= $this->getTitle();
     $content = '';
     switch ($infoStyle) {
         case 'list':
             // Output style 1:  Old format, no visible tables, much smaller text. Better suited to right side of page.
             $content .= FunctionsPrintLists::eventsList($startjd, $endjd, $onlyBDM ? 'BIRT MARR DEAT' : '', $filter, $sortStyle);
             break;
         case 'table':
             // Style 2: New format, tables, big text, etc. Not too good on right side of page
             ob_start();
             $content .= FunctionsPrintLists::eventsTable($startjd, $endjd, $onlyBDM ? 'BIRT MARR DEAT' : '', $filter, $sortStyle);
             $content .= ob_get_clean();
             break;
     }
     if ($template) {
         if ($block) {
             $class .= ' small_inner_block';
         }
         return Theme::theme()->formatBlock($id, $title, $class, $content);
     } else {
         return $content;
     }
 }