*/ class Water_The_Theme_Public { /** * The ID of this plugin. * * @since 1.0.0 * @access private * @var string $plugin_name The ID of this plugin. */ private $plugin_name; /** * The version of this plugin. * * @since 1.0.0 * @access private * @var string $version The current version of this plugin. */ private $version; /** * Initialize the class and set its properties. * * @since 1.0.0 * @param string $plugin_name The name of the plugin. * @param string $version The version of this plugin. */ public function __construct($plugin_name, $version) { $this->plugin_name = $plugin_name; $this->version = $version; } /** * Register the stylesheets for the public-facing side of the site. * * @since 1.0.0 */ public function enqueue_styles() { /** * This function is provided for demonstration purposes only. * * An instance of this class should be passed to the run() function * defined in Water_The_Theme_Loader as all of the hooks are defined * in that particular class. * * The Water_The_Theme_Loader will then create the relationship * between the defined hooks and the functions defined in this * class. */ wp_enqueue_style($this->plugin_name, plugin_dir_url(__FILE__) . 'css/water-the-theme-public.css', array(), $this->version, 'all'); } /** * Register the JavaScript for the public-facing side of the site. * * @since 1.0.0 */ public function enqueue_scripts() { /** * This function is provided for demonstration purposes only. * * An instance of this class should be passed to the run() function * defined in Water_The_Theme_Loader as all of the hooks are defined * in that particular class. * * The Water_The_Theme_Loader will then create the relationship * between the defined hooks and the functions defined in this * class. */ wp_enqueue_script($this->plugin_name, plugin_dir_url(__FILE__) . 'js/water-the-theme-public.js', array('jquery'), $this->version, false); } public function water_the_theme($thePage) { $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'; } if ($sitename !== 'Lake') { $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; } if ($value !== 'n/a') { $statistics[] = ""; } //PC::debug($value . " " . $sitename . " " . $parameter); } // end foreach usort($statistics, function ($a, $b) { preg_match('/datetime=\'(\d+)\'/', $a, $matchesA); preg_match('/datetime=\'(\d+)\'/', $b, $matchesB); $dateTimeA = isset($matchesA[1]) ? (int)$matchesA[1] : 0; $dateTimeB = isset($matchesB[1]) ? (int)$matchesB[1] : 0; return $dateTimeB - $dateTimeA; }); foreach ($statistics as &$row) { if (preg_match('/", $row); } } // highlight_string(var_export($statistics, true)); list($array1, $array2, $array3) = array_chunk($statistics, ceil(count($statistics) / 1)); // highlight_string(var_export($array1, true)); 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
Tail Race Level \(AMSL\)<\/td>([\d.]+)<\/td>/', $row, $matches)) { // Extract the numeric value and append " ft" $value = $matches[1] . ' ft'; // Replace the original content in the second $row = preg_replace('/
Tail Race Level \(AMSL\)<\/td>[\d.]+<\/td>/', "
Tail Race Level (AMSL)$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_level"; //$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 }