i18n::translate('Upcoming Yahrzeiten'),
'type'=>'both',
'descr'=>i18n::translate('The Upcoming Yahrzeiten block shows anniversaries of death dates that will occur in the near future. You can configure the period shown, and the Administrator can configure how far into the future this block will look.'),
'canconfig'=>true,
'config'=>array(
'cache' =>1,
'days' =>30,
'infoStyle' =>'style2',
'allowDownload'=>'yes'
)
);
// this block prints a list of upcoming yahrzeit events of people in your gedcom
function print_yahrzeit($block=true, $config='', $side, $index) {
global $SHOW_ID_NUMBERS, $ctype, $TEXT_DIRECTION;
global $WT_IMAGE_DIR, $WT_IMAGES, $WT_BLOCKS;
global $DAYS_TO_SHOW_LIMIT, $SHOW_MARRIED_NAMES, $SERVER_URL;
$block=true; // Always restrict this block's height
if (empty($config))
$config=$WT_BLOCKS['print_yahrzeit']['config'];
if (empty($config['infoStyle' ])) $config['infoStyle' ]='style2';
if (empty($config['allowDownload'])) $config['allowDownload']='yes';
if (empty($config['days' ])) $config['days' ]=$DAYS_TO_SHOW_LIMIT;
if ($config['days']<1 ) $config['days']=1;
if ($config['days']>$DAYS_TO_SHOW_LIMIT) $config['days']=$DAYS_TO_SHOW_LIMIT;
$startjd=server_jd();
$endjd =$startjd+max(min($config['days'], 1), $DAYS_TO_SHOW_LIMIT)-1;
if (!WT_USER_ID) {
$allowDownload = "no";
}
$id="yahrzeit";
$title='';
if ($WT_BLOCKS['print_yahrzeit']['canconfig']) {
if ($ctype=="gedcom" && WT_USER_GEDCOM_ADMIN || $ctype=="user" && WT_USER_ID) {
if ($ctype=="gedcom") {
$name = WT_GEDCOM;
} else {
$name = WT_USER_NAME;
}
$title .= "";
$title .= "";
}
}
$title .= i18n::translate('Upcoming Yahrzeiten');
$title .= help_link('yahrzeit');
$content = "";
// The standard anniversary rules cover most of the Yahrzeit rules, we just
// need to handle a few special cases.
// Fetch normal anniversaries...
$yahrzeits=array();
$hidden=0;
for ($jd=$startjd-1; $jd<=$endjd+30;++$jd) {
foreach (get_anniversary_events($jd, 'DEAT _YART') as $fact) {
// Extract hebrew dates only
if ($fact['date']->date1->CALENDAR_ESCAPE()=='@#DHEBREW@' && $fact['date']->MinJD()==$fact['date']->MaxJD()) {
// Apply privacy
if (displayDetailsById($fact['id']) && showFactDetails($fact['fact'], $fact['id']) && !FactViewRestricted($fact['id'], $fact['factrec'])) {
$yahrzeits[]=$fact;
} else {
++$hidden;
}
}
}
}
// ...then adjust dates
foreach ($yahrzeits as $key=>$yahrzeit) {
if (strpos('1 DEAT', $yahrzeit['factrec'])!==false) { // Just DEAT, not _YART
$today=new JewishDate($yahrzeit['jd']);
$hd=$yahrzeit['date']->MinDate();
$hd1=new JewishDate($hd);
$hd1->y+=1;
$hd1->SetJDFromYMD();
// Special rules. See http://www.hebcal.com/help/anniv.html
// Everything else is taken care of by our standard anniversary rules.
if ($hd->d==30 && $hd->m==2 && $hd->y!=0 && $hd1->DaysInMonth()<30) { // 30 CSH
// Last day in CSH
$yahrzeit[$key]['jd']=JewishDate::YMDtoJD($today->y, 3, 1)-1;
}
if ($hd->d==30 && $hd->m==3 && $hd->y!=0 && $hd1->DaysInMonth()<30) { // 30 KSL
// Last day in KSL
$yahrzeit[$key]['jd']=JewishDate::YMDtoJD($today->y, 4, 1)-1;
}
if ($hd->d==30 && $hd->m==6 && $hd->y!=0 && $today->DaysInMonth()<30 && !$today->IsLeapYear()) { // 30 ADR
// Last day in SHV
$yahrzeit[$key]['jd']=JewishDate::YMDtoJD($today->y, 6, 1)-1;
}
}
}
switch ($config['infoStyle']) {
case "style1": // List style
foreach ($yahrzeits as $yahrzeit)
if ($yahrzeit['jd']>=$startjd && $yahrzeit['jd']<$startjd+$config['days']) {
$ind=person::GetInstance($yahrzeit['id']);
//@@ $content .= "getLinkUrl())."\" class=\"list_item name2\">".$ind->getFullName()."".$ind->getSexImage();
$content .= "getLinkUrl())."\" class=\"list_item name2\">".PrintReady($ind->getFullName())."".$ind->getSexImage();
$content .= "
| ".i18n::translate('NAME')." | "; $content .= ""; $content .= "".i18n::translate('DATE')." | "; $content .= "![]() | ";
$content .= "".i18n::translate('_YART')." | "; $content .= "
|---|---|---|---|
| ";
$content .= "getLinkUrl())."\" class=\"list_item name2\" dir=\"".$TEXT_DIRECTION."\">".PrintReady($name)."";
$content .= $ind->getSexImage();
$addname=$ind->getAddName();
if ($addname) {
$content .= " ".PrintReady($addname).""; } $content .= " | ";
// GIVN for sorting
$content .= "";
$today=new JewishDate($yahrzeit['jd']);
$td=new GedcomDate($today->Format('%@ %A %O %E'));
// death/yahrzeit event date
$content .= ""; $content .= "".$yahrzeit['date']->Display(true, NULL, array()).""; $content .= " | "; // Anniversary $content .= ""; $anniv = $yahrzeit['anniv']; if ($anniv==0) { $content .= ' '; } else { $content .= "{$anniv}"; } if ($config['allowDownload']=='yes') { // hCalendar:dtstart and hCalendar:summary //TODO does this work?? $content .= "Display(false,'Ymd',array()))."\">"; $content .= "getFullName()))."\">"; } // upcomming yahrzeit dates $content .= " | "; $content .= "".$td->Display(true, NULL, array('gregorian')).""; // hCalendar:url $content .= " | "; $content .= "
";
$content .= ' '.i18n::translate('GIVN').''; $content .= i18n::translate('Total Names').": ".$count; if ($hidden) { $content .= " ".i18n::translate('Hidden')." : {$hidden}"; } $content .= " | ";
$content .= "";
$content .= "";
if ($config['allowDownload']=='yes') {
$uri = $SERVER_URL.basename($_SERVER['REQUEST_URI']);
$alt = i18n::translate('Download file %s', 'hCal-events.ics');
if (count($yahrzeits)) {
$content .= " ";
}
}
$content .= ' |