. * For details about this program, see the readme file. */ class AdatoSystems_Zman_Widget extends WP_Widget { /** * Widget setup. */ function AdatoSystems_Zman_Widget() { /* Widget settings. */ $widget_ops = array('classname' => 'frizman-shabbat', 'description' => 'displays various Shabbat zmanim (times) for a USA zip code or world city'); /* Widget control settings. */ $control_ops = array('width' => 200, 'height' => 200, 'id_base' => 'frizman-shabbat-widget'); /* Create the widget. */ $this->WP_Widget('frizman-shabbat-widget', 'Shabbat Zmanim', $widget_ops, $control_ops); } //end function AdatoSystems_Zman_Widget function widget($args, $instance) { extract($args); /* Our variables from the widget settings. */ date_default_timezone_set('UTC'); $title = apply_filters('widget_title', $instance['title']); // Show the love $lovetext = "
Developed by AdatoSystems.com.
Key features by Hebcal.com.
"; // Set time display (seconds or no seconds) if($instance['showseconds']) { $timedisplay = "g:i:s A"; } else { $timedisplay = "g:i A"; } // Set transliteration style if($instance['ashki']) { $titleshabbat = 'Shabbos'; $titlehavdalah = 'Havdolo'; } else { $titleshabbat = 'Shabbat'; $titlehavdalah = 'Havdalah'; } //end transliteration style /* What day is Friday */ if(date('N')==5 || date("N")==6) { $friday = strtotime("now"); $friday_txt = date("M d, Y", $friday); $friday_ymd = date("Y-m-d", $friday); } else { $friday = strtotime( "next friday" ); if(!$friday) { $daysdiff = 5-now("N"); $friday = date('Y-m-d', strtotime(now(), " + ".$daysdiff." day")); $friday_ymd = date("Y-m-d", $friday); } $friday_txt = date("M d, Y", $friday ); $friday_ymd = date("Y-m-d", $friday); } //end get Friday if(date('N')!=6) { $saturday = strtotime( "next saturday" ); if(!$saturday) { $daysdiff = 6-now("N"); $saturday = date('Y-m-d', strtotime(now(), " + ".$daysdiff." day")); } $saturday_txt = date("Y-m-d", $saturday); } else { $saturday = strtotime("now"); $saturday_txt = date("Y-m-d", $saturday); } //end what day is saturday /* JSON get lat/long from zip using geocoder.us */ if(!$instance['userlat']) { $latlongurl = "http://api.geonames.org/postalCodeLookupJSON?formatted=true&postalcode=".$instance['zip']."&country=US&date=".$friday."&username=adatosystems&style=full"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $latlongurl); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $du = curl_exec($ch); curl_close($ch); $djd = json_decode(utf8_encode($du),true); $long = $djd['postalcodes'][0]['lng']; $lat = $djd['postalcodes'][0]['lat']; $city = $djd['postalcodes'][0]['placeName']; $state = $djd['postalcodes'][0]['adminCode1']; $country = $djd['postalcodes'][0]['countryCode']; $address = "$city, $state $country"; } else { $lat = $instance['userlat']; $long = $instance['userlong']; $latlongurl = "http://open.mapquestapi.com/nominatim/v1/reverse.php?format=json&lat=".$lat."&lon=".$long; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $latlongurl); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $du = curl_exec($ch); curl_close($ch); $djd = json_decode(utf8_encode($du),true); $city = $djd['address']['city']; $state = $djd['address']['state']; $country = $djd['address']['country_code']; $address = "$city, $state $country"; } /* Get time offset for timzezone and DST */ $tzurl = "http://api.geonames.org/timezoneJSON?lat=".$lat."&lng=".$long."&date=".$friday_ymd."&username=adatosystems"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $tzurl); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $tz = curl_exec($ch); curl_close($ch); $tzjd = json_decode(utf8_encode($tz),true); $tzname = $tzjd['timezoneId']; $frisunrise = $tzjd['dates'][0]['sunrise']; $frisunset = $tzjd['dates'][0]['sunset']; //***Gives "2013-11-22 17:01". Now convert to date, and set the text to something readable $frisunrisedatetime = strtotime($frisunrise); $frisunsetdatetime = strtotime($frisunset); $saturl = "http://api.geonames.org/timezoneJSON?lat=".$lat."&lng=".$long."&date=".$saturday_txt."&username=adatosystems"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $tzurl); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $tz = curl_exec($ch); curl_close($ch); $tzjd = json_decode(utf8_encode($tz),true); $tzname = $tzjd['timezoneId']; $satsunrise = $tzjd['dates'][0]['sunrise']; $satsunset = $tzjd['dates'][0]['sunset']; $satsunrisedatetime = strtotime($satsunrise); $satsunsetdatetime = strtotime($satsunset); // Get Hebrew Date from HebCal // more info: http://www.hebcal.com/home/219/hebrew-date-converter-rest-api if($instance['hebdatetxt']) { $hebdateurl = "http://www.hebcal.com/converter/?cfg=json&gy=".date("Y",$friday)."&gm=".date("n",$friday)."&gd=".date("j",$friday)."&g2h=1"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $hebdateurl); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $hebdate = curl_exec($ch); curl_close($ch); //$hebdate = file_get_contents("http://www.hebcal.com/converter/?cfg=json&gy=".date("Y",$friday)."&gm=".date("n",$friday)."&gd=".date("j",$friday)."&g2h=1"); $hebdatejd = json_decode($hebdate,true); $hebengdate = $hebdatejd['hd']." ".$hebdatejd['hm'].", ".$hebdatejd['hy']; $hebhebdate = $hebdatejd['hebrew']; if($instance['hebdatetxt'] == "e") {$hebrewdate = $hebengdate; } if($instance['hebdatetxt'] == "h") {$hebrewdate = $hebhebdate; } if($instance['hebdatetxt'] == "b") {$hebrewdate = $hebengdate."
".$hebhebdate; } } //end get Hebcal date // Use the HebCal JSON for the hebrew elements (parsha hashavua, etc.) // information here: http://www.hebcal.com/home/195/jewish-calendar-rest-api if($instance['inisrael']) { $inisrael = "i=on"; } else { $inisrael = "i=off"; } $hebcalurl = "http://www.hebcal.com/hebcal/?v=1&cfg=json&nh=off&nx=off&year=now&month=x&ss=off&mf=off&c=off&s=on&".$inisrael."&lg=".$instance['ptext']; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $hebcalurl); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $hebcal = curl_exec($ch); if($instance['debug'] ) { echo "

hebcal CURL error info

"; if ($hebcal === FALSE) { die("Curl failed with error: " . curl_error($ch)); } } curl_close($ch); $hebcaljd = json_decode($hebcal,true); if($instance['debug'] ) { echo "

hebcal JSON error info

"; if (is_null($hebcaljd)) { die("Json decoding failed with error: ". json_last_error()); } } foreach($hebcaljd['items'] as $hebstat => $hebitem) { foreach($hebitem as $stat=>$value) { if($hebitem['category'] == "parashat") { if($hebitem['date'] == $saturday_txt) { $parshaname = $hebitem['title']; if($instance['ptext'] == "sh" || $instance['ptext'] == "ah") {$parshaname = $parshaname." / ".$hebitem['hebrew']; } } } } } //end get Parsha reading // Calculate Plag haMincha if($instance['showplag']) { $sunrisesec = $frisunrisedatetime+$offset; $sunsetsec = $frisunsetdatetime+$offset; if($instance['plagmethod'] == "gra") { $halachichour = ($sunsetsec - $sunrisesec)/12; $plaginseconds = $sunsetsec - ($halachichour*1.25); $plagtext = 'Plag haMincha (GR\'\'A): '.date($timedisplay, $plaginseconds); } elseif ($instance['plagmethod'] == "avr") { $masunrise = $sunrisesec-($instance['plagrisemin']*60); $masunset = $sunsetsec+($instance['plagsetmin']*60); $halachichour = ($masunset - $masunrise)/12; $plaginseconds = $masunset - ($halachichour*1.25); $plagtext = 'Plag haMincha (M\'\'A): '.date($timedisplay, $plaginseconds); } else { $plagtext = 'Plag haMincha: unavailable'; } } //end showplag // Calculate Shema if($instance['showshema']) { $sunrisesec = $frisunrisedatetime+$offset; $sunsetsec = $frisunsetdatetime+$offset; if($instance['shemamethod'] == "gra") { $halachichour = ($sunsetsec - $sunrisesec)/12; $shemainseconds = $sunrisesec + ($halachichour*3); $shematext = 'Latest Shema (GR\'\'A): '.date($timedisplay, $shemainseconds); } elseif ($instance['shemamethod'] == "avr") { $masunrise = $sunrisesec-($instance['shemarisemin']*60); $masunset = $sunsetsec+($instance['shemasetmin']*60); $halachichour = ($masunset - $masunrise)/12; $shemainseconds = $masunrise + ($halachichour*3); $shematext = 'Latest Shema (M\'\'A): '.date($timedisplay, $shemainseconds); } else { $shematext = 'Latest Shema: unavailable'; } } //end showshema // Calculate Candles & havdalah if($instance['showcandles']) { $candletime = date($timedisplay, $frisunsetdatetime-($instance['cmin']*60 ) ); } if($instance['showhavdalah']) {$havdalahtime = date($timedisplay, $satsunsetdatetime+($instance['m']*60) ); } // Display the widget already! echo $before_widget; echo $before_title, $title, $after_title; echo '
'; echo ''.$titleshabbat.' Times for '.$friday_txt.'
'; if($instance['showlocation'] ) {echo $address.'
'; } if($instance['hebdatetxt']) {echo $hebrewdate.'
';} if($instance['showparsha'] ) {echo $parshaname.'
'; } if($instance['showplag'] ) {echo $plagtext.'
'; } if($instance['showcandles'] ) {echo 'Candle Lighting Time: '.$candletime.'
'; } if($instance['showfrisunset'] ) {echo 'Sunset Friday: '.date($timedisplay,$frisunsetdatetime).'
';} if($instance['showsunrise'] ) {echo 'Sunrise: '.date($timedisplay, $frisunrisedatetime).'
';} if($instance['showshema'] ) {echo $shematext.'
'; } if($instance['showsatsunset'] ) {echo 'Sunset Saturday: '.date($timedisplay, $satsunsetdatetime).'
';} if($instance['showhavdalah'] ) {echo $titlehavdalah.' ('.$instance['m'].' min): '.$havdalahtime.'
'; } if($instance['love'] ) {echo $lovetext.'
'; } if($instance['debug'] ) { echo "

General debug info

"; echo 'Current PHP version: ' . phpversion().'
'; echo 'Latlong URL is '.$latlongurl.'
'; echo 'Lat and Long is: '.$lat.' and '.$long.'
'; echo 'Friday URL is '.$tzurl.'
'; echo 'Saturday URL is '.$saturl.'
'; echo 'Time zone is '.$tzname.', tzoffset is '.$tzoffset.', dstoffset is '.$dstoffset.' and offset is '.$offset.'
'; echo 'Friday timestamp: '.$friday.' and Friday text is '.$friday_txt.'
'; echo 'Saturday timestamp: '.$saturday.' and Saturday text: '.$saturday_txt.'
'; echo 'Friday Sunset: '.$frisunset.'
'; echo 'Saturday Sunset: '.$satsunset.'
'; echo 'hebcal URL is '.$hebcalurl.'
'; echo 'Hebdate URL is '.$hebdateurl.'
'; echo 'Hebcal jewish date URL: '.$hebcaljd['link'].'
'; echo 'Weekday number: '.date('N').'
'; echo 'halachichour: '.$halachichour.'
'; echo 'plaginseconds: '.$plaginseconds.'
'; } //end debug echo '
'; echo $after_widget; } //end function widget,instance function update($new_instance, $old_instance) { $instance = $old_instance; $instance['title'] = strip_tags($new_instance['title']); $instance['zip'] = strip_tags($new_instance['zip']); $instance['userlat'] = strip_tags($new_instance['userlat']); $instance['userlong'] = strip_tags($new_instance['userlong']); $instance['ashki'] = $new_instance['ashki']; $instance['showlocation'] = $new_instance['showlocation']; $instance['showseconds'] = $new_instance['showseconds']; $instance['hebdatetxt'] = $new_instance['hebdatetxt']; $instance['showcandles'] = $new_instance['showcandles']; $instance['showparsha'] = $new_instance['showparsha']; $instance['showhavdalah'] = $new_instance['showhavdalah']; $instance['showsunrise'] = $new_instance['showsunrise']; $instance['showfrisunset'] = $new_instance['showfrisunset']; $instance['showsatsunset'] = $new_instance['showsatsunset']; $instance['showplag'] = $new_instance['showplag']; $instance['m'] = $new_instance['m']; $instance['cmin'] = $new_instance['cmin']; $instance['ctime'] = $new_instance['ctime']; $instance['ptext'] = $new_instance['ptext']; $instance['inisrael'] = $new_instance['inisrael']; $instance['plagmethod'] = $new_instance['plagmethod']; $instance['plagrisemin'] = $new_instance['plagrisemin']; $instance['plagsetmin'] = $new_instance['plagsetmin']; $instance['showshema'] = $new_instance['showshema']; $instance['shemamethod'] = $new_instance['shemamethod']; $instance['shemarisemin'] = $new_instance['shemarisemin']; $instance['shemasetmin'] = $new_instance['shemasetmin']; $instance['love'] = $new_instance['love']; $instance['debug'] = $new_instance['debug']; return $instance; } //end function update /** * Displays the widget settings controls on the widget panel. * Make use of the get_field_id() and get_field_name() function * when creating your form elements. This handles the confusing stuff. */ function form($instance) { /* Set up some default widget settings. */ $defaults = array('zip' => '90210', 'm' => '72', 'cmin' => '18', 'plagmethod' => 'gra', 'shemamethod' => 'gra', 'ptext' => 's', 'love' => 'checked'); $instance = wp_parse_args((array) $instance, $defaults); ?>


Or provide the latitude/Longitude

General Display Choices:

id="get_field_id('ashki'); ?>" name="get_field_name('ashki'); ?>" />
id="get_field_id('showlocation'); ?>" name="get_field_name('showlocation'); ?>" />
id="get_field_id('showseconds'); ?>" name="get_field_name('showseconds'); ?>" />
id="get_field_id('showsunrise'); ?>" name="get_field_name('showsunrise'); ?>" />
id="get_field_id('showfrisunset'); ?>" name="get_field_name('showfrisunset'); ?>" />
id="get_field_id('showsatsunset'); ?>" name="get_field_name('showsatsunset'); ?>" />
  Hebrew Date Display:
name="get_field_name('hebdatetxt'); ?>" value="n">Do not show Hebrew date
name="get_field_name('hebdatetxt'); ?>" value="e">Show Hebrew date in English
name="get_field_name('hebdatetxt'); ?>" value="h">Show Hebrew date in Hebrew
name="get_field_name('hebdatetxt'); ?>" value="b">Show Hebrew date in both

Candlelighting & Havdalah Choices:

id="get_field_id('showcandles'); ?>" name="get_field_name('showcandles'); ?>" />
 
id="get_field_id('showhavdalah'); ?>" name="get_field_name('showhavdalah'); ?>" />
 

Torah Portion Display Options

id="get_field_id('showparsha'); ?>" name="get_field_name('showparsha'); ?>" />
id="get_field_id('inisrael'); ?>" name="get_field_name('inisrael'); ?>" />
  Display using:
name="get_field_name('ptext'); ?>" value="s">Sephardic Transliterations
name="get_field_name('ptext'); ?>" value="sh">Sephardic Transliterations + Hebrew
name="get_field_name('ptext'); ?>" value="a">Ashkenazic Transliterations
name="get_field_name('ptext'); ?>" value="ah">Ashkenazic Transliterations + Hebrew

Plag haMincha Options:

id="get_field_id('showplag'); ?>" name="get_field_name('showplag'); ?>" />
  Calculate using:
name="get_field_name('plagmethod'); ?>" value="gra">use GR''A
name="get_field_name('plagmethod'); ?>" value="avr">use Magen Avraham
 
 

Shema Options:

id="get_field_id('showshema'); ?>" name="get_field_name('showshema'); ?>" />
  Calculate using:
name="get_field_name('shemamethod'); ?>" value="gra">use GR''A
name="get_field_name('shemamethod'); ?>" value="avr">use Magen Avraham
 
 

id="get_field_id('debug'); ?>" name="get_field_name('debug'); ?>" />

id="get_field_id('love'); ?>" name="get_field_name('love'); ?>" />

If you REALLY like this widget, cash never hurts. Any amount is welcome.