diff --git a/public/class-water-the-theme-public.php b/public/class-water-the-theme-public.php index 5ed93ff..a481e70 100644 --- a/public/class-water-the-theme-public.php +++ b/public/class-water-the-theme-public.php @@ -102,8 +102,207 @@ class Water_The_Theme_Public { public function water_the_theme($thePage) { - return "boo!"; + $doc = new DOMDocument(); + $doc->loadHTML($thePage); + $xml_tree = simplexml_import_dom($doc); + + $short_code_name = (string)$xml_tree->body->div->attributes()->class; + + $thePage =""; + + // front page + // [usgs_custom name="Timely Information" location='03071590,03071600,03071605' parameters='00010,00065,62614'] + if ($short_code_name === 'Timely Information') { + foreach ($xml_tree->body->div->div as $div) { + + $value = (string)$div; + $class = (string)$div->attributes()->class; + + $datetime = (string)$div->attributes()->datetime; + + list($sitename, $parameter) = explode(' ', $class); + $sitename = ucwords(preg_replace('/_/', ' ', $sitename)); + $parameter = ucwords(preg_replace('/_/', ' ', $parameter)); + + if ($parameter === 'Lake Or Reservoir Water Surface Elevation Above Ngvd 1929') { + $parameter = '(AMSL)'; + } + if ($sitename === 'Cheat Lake Near Stewartstown Wv') { + if ($parameter === '(AMSL)') { + $sitename = 'Lake Level'; + } else { + $sitename = 'Lake'; + } + } + if ($sitename === 'Cheat River At Lake Lynn Pa') { + if ($parameter === 'Gage Height') { + $sitename = 'Below Dam'; + } else { + $sitename = 'At Dam'; + } + } + if ($sitename === 'Cheat River At Davidson Pa') { + $sitename = 'Below Dam'; + } + + $thePage .= ''; + $thePage .= ""; + $thePage .= ''; + + } + + //[nws_custom location='lldp1'] + $att = [ + 'name' => 'Timely Information', + 'location' => 'lldp1', + 'parameters' => null, + 'date_range' => 'current', + 'order' => 'asc' + ]; + + $nws_custom = Water_The_Theme_Public::nws_custom($att); + + $thePage .= $nws_custom; + + } // end Timely Information + + // Statics Page - last 5 lake data + // [usgs_custom name="Statistics" location='03071590,03071600' parameters='00010,00065,62614' date_range='previous,5,16:00' order='desc'] + if ($short_code_name === 'Statistics') { + + $statistics = []; + + foreach ($xml_tree->body->div->div as $div) { + + $value = (string)$div; + $class = (string)$div->attributes()->class; + + $datetime = (string)$div->attributes()->datetime; + + list($sitename, $parameter) = explode(' ', $class); + $sitename = ucwords(preg_replace('/_/', ' ', $sitename)); + $parameter = ucwords(preg_replace('/_/', ' ', $parameter)); + + if ($parameter === 'Lake Or Reservoir Water Surface Elevation Above Ngvd 1929') { + $parameter = '(AMSL)'; + } + if ($sitename === 'Cheat Lake Near Stewartstown Wv') { + if ($parameter === '(AMSL)') { + $sitename = 'Lake Level'; + } else { + $sitename = 'Lake'; + } + } + if ($sitename === 'Cheat River At Lake Lynn Pa') { + $sitename = 'Tail Race Level'; + $parameter = ' (AMSL)'; + } + if ($sitename === 'Cheat River At Davidson Pa') { + $sitename = 'Below Dam'; + } - } + if ($sitename === 'Tail Race Level') { + $value = (float)$value + 776.63; + } + $statistics[] = ""; + + //PC::debug($value . " " . $sitename . " " . $parameter); + } // end foreach + + list($array1, $array2, $array3) = array_chunk($statistics, ceil(count($statistics) / 3)); + foreach($array1 as $key => $value ) { + $thePage .= $array2[$key]; + $thePage .= $array3[$key]; + $thePage .= $value; + } + + //PC::debug($count); + + } // end Statistics + + $thePage .= '
$sitename $parameter$value
$sitename $parameter$value
'; + return $thePage; + + } // function water the theme + + public function nws_custom( $att ) { + + + list($name, $location, $parameters, $date_range, $order) = [ + $att['name'], + $att['location'], + $att['parameters'], + $att['date_range'], + $att['order'] + ]; + $locations = explode(',', $location); + + // Tail Race Level = Gage Datum + Gage Height + foreach ($locations as $location) { + + $thePage = get_transient('nws_custom-' . $name . $location . $date_range . $parameters . $order ); + + if ( !$thePage ) { + + $url = "http://water.weather.gov/ahps2/hydrograph_to_xml.php?gage=$location&output=xml"; + + $response = wp_remote_get( $url ); + $data = wp_remote_retrieve_body( $response ); + + if ( ! $data ) { + return 'Nation Weather Service is not Responding.'; + } + + + $xml_tree = simplexml_load_string( $data ); + if ( False === $xml_tree ) { + return 'Unable to parse NWS XML'; + } + + // space to underscore; all lower case; only special character allowed is underscored + $SiteName = (string)$xml_tree->attributes()->name; + $SiteName = preg_replace('/[^A-Za-z0-9_]/', '', strtolower(preg_replace('/\s+/', '_', $SiteName))); + + $waterlevel = (string)$xml_tree->zerodatum; + + $c = 0; + foreach ( $xml_tree->observed->datum as $datum ) { + + // in javascript this works out of the box (* 1000) + $datetime = strtotime($datum->valid) * 1000; + $gageheight = $datum->primary; + $waterflow = (string)$datum->secondary; + + if ($waterflow === '-999' || $waterflow === 0) { + $waterflow = '0 cfs'; + } else { + $waterflow = $waterflow * 1000; + $waterflow = $waterflow . " cfs"; + } + + $tail_race_level = (float)$waterlevel + (float)$gageheight; + + if($c === 0 && $date_range === 'current') { + $thePage .= "Tail Race Level (AMSL)$tail_race_level ft"; + //$thePage .= "Gage Datum (AMSL)$waterlevel ft"; + $thePage .= "Tail Water Flow$waterflow"; + break; + } else { + $thePage .= "Tail Race Level (AMSL)$tail_race_evel"; + //$thePage .= "Gage Datum (AMSL)$waterlevel ft"; + $thePage .= "Tail Water Flow$waterflow"; + } + $c++; + + } // foreach xml_tree as site data + + } // foreach NWS location + + + set_transient( 'nws_custom-' . $name . $location . $date_range . $parameters . $order, $thePage, 60 * 15 ); + } + + return $thePage; + } // function nws_custom } diff --git a/public/js/water-the-theme-public.js b/public/js/water-the-theme-public.js index 071048d..5d07b91 100644 --- a/public/js/water-the-theme-public.js +++ b/public/js/water-the-theme-public.js @@ -29,4 +29,33 @@ * practising this, we should strive to set a better example in our own work. */ + $( window ).load(function() { + + // #BED8D3' '#D8E4E6' + $('#Statistics tr:nth-child(6n), #Statistics tr:nth-child(6n-1), #Statistics tr:nth-child(6n-2)').css({backgroundColor:'#D8E4E6'}); + $('#Statistics tr:nth-child(6n-3), #Statistics tr:nth-child(6n-4), #Statistics tr:nth-child(6n-5)').css({backgroundColor:'#BED8D3'}); + + $("td[datetime]").each(function(key,value){ + var dt = $(value).attr('datetime'); + var d = new Date(Number(dt)); + d = d.toLocaleString(); + $(this).html(d); + }); + + /* + div:nth-child(6n), div:nth-child(6n-1), div:nth-child(6n-2) { + background: red; + } + div:nth-child(6n-3), div:nth-child(6n-4), div:nth-child(6n-5) { + background: blue; + } + */ + + + }); + + //$('#Statistics tr:nth-child(6n), #Statistics tr:nth-child(6n-1), #Statistics tr:nth-child(6n-2)').css({backgroundColor:'#d4cdcd'}); + //$('#Statistics tr:nth-child(6n-3), #Statistics tr:nth-child(6n-4), #Statistics tr:nth-child(6n-5)').css({backgroundColor:'#bac3c5'}); + //$('#Statistics tr:nth-child(6n-3), #Statistics tr:nth-child(6n-4), #Statistics tr:nth-child(6n-5)').css({backgroundColor:'#bac3c5'}); + })( jQuery );