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 .= "\"".i18n::translate('Configure')."\""; } } $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 .= "
"; $content .= $yahrzeit['date']->Display(true); $content .= ', '.i18n::translate('%s year anniversary', $yahrzeit['anniv']); $content .= "
"; } break; case "style2": // Table style require_once WT_ROOT.'js/sorttable.js.htm'; require_once WT_ROOT.'includes/classes/class_gedcomrecord.php'; $table_id = "ID".floor(microtime()*1000000); // sorttable requires a unique ID $content .= ""; $content .= ""; $content .= ""; $content .= ""; $content .= ""; $content .= ""; $content .= ""; $content .= ""; $count=0; foreach ($yahrzeits as $yahrzeit) { if ($yahrzeit['jd']>=$startjd && $yahrzeit['jd']<$startjd+$config['days']) { ++$count; $ind=person::GetInstance($yahrzeit['id']); $content .= ""; // hCalendar:vevent // Record name(s) $name=$ind->getFullName(); $url=$ind->getLinkUrl(); $content .= ""; // GIVN for sorting $content .= ""; $today=new JewishDate($yahrzeit['jd']); $td=new GedcomDate($today->Format('%@ %A %O %E')); // death/yahrzeit event date $content .= ""; // Anniversary $content .= ""; $content .= ""; } } // table footer $content .= ""; $content .= ""; $content .= ""; $content .= "'; $content .= '
".i18n::translate('NAME')."GIVN".i18n::translate('DATE')."\"".i18n::translate('Anniversary')."\"".i18n::translate('_YART')."
"; $content .= "getLinkUrl())."\" class=\"list_item name2\" dir=\"".$TEXT_DIRECTION."\">".PrintReady($name).""; $content .= $ind->getSexImage(); $addname=$ind->getAddName(); if ($addname) { $content .= "
".PrintReady($addname).""; } $content .= "
"; $exp = explode(",", str_replace('<', ',', $name).","); $content .= $exp[1]; $content .= ""; $content .= "".$yahrzeit['date']->Display(true, NULL, array()).""; $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 .= ' '.i18n::translate('GIVN').'
'; $content .= i18n::translate('Total Names').": ".$count; if ($hidden) { $content .= "
".i18n::translate('Hidden')." : {$hidden}"; } $content .= "
GIVN"; if ($config['allowDownload']=='yes') { $uri = $SERVER_URL.basename($_SERVER['REQUEST_URI']); $alt = i18n::translate('Download file %s', 'hCal-events.ics'); if (count($yahrzeits)) { $content .= "\"{$alt}\""; } } $content .= '  
'; break; } global $THEME_DIR; if ($block) { require $THEME_DIR.'templates/block_small_temp.php'; } else { require $THEME_DIR.'templates/block_main_temp.php'; } } function print_yahrzeit_config($config) { global $WT_BLOCKS, $DAYS_TO_SHOW_LIMIT; 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; print ''; print i18n::translate('Number of days to show'); print help_link('days_to_show'); print ''; print ''; print ''; print ''; print i18n::translate('Presentation Style'); print help_link('style'); print ''; print ''; print ''; print i18n::translate('Allow calendar events download?'); print help_link('cal_dowload'); print ''; print ''; // Cache file life is not configurable by user: anything other than 1 day doesn't make sense print ''; print ''; } ?>