function mom_weather_map($atts, $content = null) { extract(shortcode_atts(array("width" => '536', "height" => '370', "city" => '', "zoom" => 1, "layer" => 'rain'), $atts)); if (isset($_POST['location']) && $_POST['location'] != '') { $city = $_POST['location']; } ob_start(); $rndn = rand(1, 100); wp_enqueue_script('open_weather_map', '//openlayers.org/api/OpenLayers.js', '', '1.0', false); if ($city != '') { if (isset($_COOKIE['lon']) && $_COOKIE['lon'] != '') { $lon = isset($_COOKIE['lon']) ? $_COOKIE['lon'] : ''; $lat = isset($_COOKIE['lat']) ? $_COOKIE['lat'] : ''; } else { $lon = isset($_POST['lon']) ? $_POST['lon'] : ''; $lat = isset($_POST['lat']) ? $_POST['lat'] : ''; if ($lat != '' && $lon != '') { mom_setcookie('lat', $lat); mom_setcookie('lon', $lon); } } if ($lat != '' && $lon != '') { $city_url = wp_remote_get('http://api.openweathermap.org/data/2.5/weather?lat=' . $lat . '&lon=' . $lon); } else { $city_url = wp_remote_get('http://api.openweathermap.org/data/2.5/weather?q=' . $city); } if (!is_wp_error($city_url)) { $city_json = json_decode($city_url['body'], true); $lon = $city_json['coord']['lon']; $lat = $city_json['coord']['lat']; if ($zoom == 1) { $zoom = 5; } } else { return false; } } else { $lat = 0; $lon = 0; } ?> <script> jQuery(document).ready(function ($) { function init() { var args = OpenLayers.Util.getParameters(); var layer_name = '<?php echo $layer; ?> '; var lat = <?php echo $lat; ?> ; var lon = <?php echo $lon; ?> ; var zoom = <?php echo $zoom; ?> ; var opacity = 0.3; if (args.l) layer_name = args.l; if (args.lat) lat = args.lat; if (args.lon) lon = args.lon; if (args.zoom) zoom = args.zoom; if (args.opacity) opacity = args.opacity; var map = new OpenLayers.Map("map", { units:'m', projection: "EPSG:900913", displayProjection: new OpenLayers.Projection("EPSG:4326") }); var osm = new OpenLayers.Layer.XYZ( "osm", "http://${s}.tile.openweathermap.org/map/osm/${z}/${x}/${y}.png", { numZoomLevels: 18, sphericalMercator: true } ); var mapnik = new OpenLayers.Layer.OSM(); var opencyclemap = new OpenLayers.Layer.XYZ( "opencyclemap", "http://a.tile3.opencyclemap.org/landscape/${z}/${x}/${y}.png", { numZoomLevels: 18, sphericalMercator: true } ); var layer = new OpenLayers.Layer.XYZ( "layer "+layer_name, "http://${s}.tile.openweathermap.org/map/"+layer_name+"/${z}/${x}/${y}.png", //"http://wind.openweathermap.org/map/"+layer_name+"/${z}/${x}/${y}.png", { // numZoomLevels: 19, isBaseLayer: false, opacity: opacity, sphericalMercator: true } ); var centre = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913")); map.addLayers([mapnik, osm, opencyclemap, layer]); map.setCenter( centre, zoom); var ls = new OpenLayers.Control.LayerSwitcher({'ascending':false}); map.addControl(ls); map.events.register("mousemove", map, function (e) { var position = map.getLonLatFromViewPortPx(e.xy).transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326")); $("#mouse-<?php echo $rndn; ?> ").html("Lat: " + Math.round(position.lat*100)/100 + " Lon: " + Math.round(position.lon*100)/100 + ' zoom: '+ map.getZoom()); }); } init(); }); </script> <div class="mom-map-wrap" style="width: <?php echo $width; ?> px; height: <?php echo $height; ?> px;"> <div id="map" class="weather-maps"></div> </div> <?php $content = ob_get_contents(); ob_end_clean(); return $content; }
function mom_weather_page($city, $units = 'metric', $date_format = 'm/d/Y', $lang = 'en', $display = '') { wp_enqueue_script('jquery-ui-autocomplete'); wp_enqueue_script('mom-weather', get_template_directory_uri() . '/js/weather.js', array('jquery'), '1.0', true); if (isset($_COOKIE['lon']) && $_COOKIE['lon'] != '') { $lon = isset($_COOKIE['lon']) ? $_COOKIE['lon'] : ''; $lat = isset($_COOKIE['lat']) ? $_COOKIE['lat'] : ''; } else { $lon = isset($_POST['lon']) ? $_POST['lon'] : ''; $lat = isset($_POST['lat']) ? $_POST['lat'] : ''; if ($lat != '' && $lon != '') { if (function_exists('mom_setcookie')) { mom_setcookie('lat', $lat); mom_setcookie('lon', $lon); } } } if (mom_option('automatic_weather') != 1) { $lat = ''; $lon = ''; } // Today Weather if ($lat != '' && $lon != '') { $today_weather_url_orig = 'http://api.openweathermap.org/data/2.5/weather?mode=xml&lat=' . $lat . '&lon=' . $lon . '&units=' . $units; $daily_weather_url_orig = 'http://api.openweathermap.org/data/2.5/forecast/daily?lat=' . $lat . '&lon=' . $lon . '&mode=xml&units=' . $units . '&cnt=7'; } else { $today_weather_url_orig = 'http://api.openweathermap.org/data/2.5/weather?mode=xml&q=' . $city . '&units=' . $units; $daily_weather_url_orig = 'http://api.openweathermap.org/data/2.5/forecast/daily?q=' . $city . '&mode=xml&units=' . $units . '&cnt=7'; } if (isset($_POST['location']) && $_POST['location'] != '') { $city = $_POST['location']; } if (isset($_POST['units']) && $_POST['units'] != '') { $units = $_POST['units']; if ($units == 'on') { $units = 'metric'; } } if ($lat != '' && $lon != '' && !isset($_POST['location'])) { $today_weather_url = 'http://api.openweathermap.org/data/2.5/weather?mode=xml&lat=' . $lat . '&lon=' . $lon . '&units=' . $units . '&lang=' . $lang; } else { $today_weather_url = 'http://api.openweathermap.org/data/2.5/weather?mode=xml&q=' . $city . '&units=' . $units . '&lang=' . $lang; } $today_weather_data = wp_remote_get($today_weather_url); if ($today_weather_data === FALSE) { $today_weather_data = wp_remote_get($today_weather_url_orig); } $today_weather_data = wp_remote_retrieve_body($today_weather_data); $today_temp = ''; $today_icon = ''; $city_name = ''; $today_desc = ''; $today_date = ''; $this_day = ''; if (!mom_isJson($today_weather_data)) { $today_weather_data = simplexml_load_string($today_weather_data); $today_weather = $today_weather_data; if ($display == '') { $city_name = $today_weather->city['name']; } else { $city_name = $display; } if (isset($_POST['location']) && $_POST['location'] != '') { $city_name = $today_weather->city['name']; } $today_temp = (int) $today_weather->temperature['value']; $today_icon = $today_weather->weather['icon']; $today_desc = $today_weather->weather['value']; $this_day = date($date_format); $today_date = date("m/d/Y"); } $x = ''; $selected_c = ''; $selected_f = ''; if ($units == 'metric') { $x = '℃'; $selected_c = 'selected'; } elseif ($units == 'imperial') { $x = '℉'; $selected_f = 'selected'; } $base_cloud = '<i class="basecloud"></i>'; switch ($today_icon) { case '01d': $today_icon_class = 'icon-sun'; $base_cloud = ''; break; case '01n': $today_icon_class = 'icon-moon'; $base_cloud = ''; break; case '02d': $today_icon_class = 'icon-sunny'; $base_cloud = '<i class="icon-cloud"></i>'; break; case '02n': $today_icon_class = 'icon-night'; $base_cloud = '<i class="icon-cloud"></i>'; break; case '03d': $today_icon_class = 'icon-cloud'; $base_cloud = ''; break; case '03n': $today_icon_class = 'icon-cloud'; $base_cloud = ''; break; case '04d': $today_icon_class = 'icon-cloud'; $base_cloud = '<i class="icon-cloud behind"></i>'; break; case '04n': $today_icon_class = 'icon-cloud'; $base_cloud = '<i class="icon-cloud behind"></i>'; break; case '09d': $today_icon_class = 'icon-drizzle icon-sunny'; break; case '09n': $today_icon_class = 'icon-drizzle icon-night'; break; case '10d': $today_icon_class = 'icon-rainy icon-sunny'; break; case '10n': $today_icon_class = 'icon-rainy icon-night'; break; case '11d': $today_icon_class = 'icon-thunder icon-sunny'; break; case '11n': $today_icon_class = 'icon-thunder icon-night'; break; case '13d': $today_icon_class = 'icon-snowy icon-sunny'; break; case '13n': $today_icon_class = 'icon-snowy icon-night'; break; case '50d': $today_icon_class = 'icon-mist'; $base_cloud = ''; break; case '50n': $today_icon_class = 'icon-mist'; $base_cloud = ''; break; } if ($lat != '' && $lon != '' && !isset($_POST['location'])) { $daily_weather_url = 'http://api.openweathermap.org/data/2.5/forecast/daily?lat=' . $lat . '&lon=' . $lon . '&mode=xml&units=' . $units . '&cnt=7&lang=' . $lang; } else { $daily_weather_url = 'http://api.openweathermap.org/data/2.5/forecast/daily?q=' . $city . '&mode=xml&units=' . $units . '&cnt=7&lang=' . $lang; } $daily_weather_data = wp_remote_get($daily_weather_url); if ($daily_weather_data === FALSE) { $daily_weather_data = wp_remote_get($daily_weather_url_orig); $val_class = ''; $invalid_input = 'invalid'; } else { $val_class = "hidden"; $invalid_input = ''; } $daily_weather_data = wp_remote_retrieve_body($daily_weather_data); if (!mom_isJson($daily_weather_data)) { $daily_weather_data = simplexml_load_string($daily_weather_data); global $post; $weaherbg = get_post_meta($post->ID, 'mom_we_bg_img', true); $icon = get_post_meta($post->ID, 'mom_page_icon', true); ?> <section class="weather-page-wrap" style="<?php if ($weaherbg != '') { ?> background:url(<?php echo $weaherbg; ?> ) no-repeat center;<?php } else { ?> background: url(<?php echo MOM_IMG; ?> /image-bg3.jpg) no-repeat center;<?php } ?> "> <div class="inner"> <div class="weather-page-icon"> <?php if ($icon != '') { ?> <span class="<?php echo $icon; ?> "></span> <?php } else { ?> <span class="brankic-icon-cloudy"></span> <?php } ?> </div> <div class="weather-page-head"> <h2><?php _e('Weather', 'framework'); ?> </h2> <div class="weather-switch-tabs"> <form action="<?php the_permalink(); ?> " method="post" id="units-form"> <label class="w-unit <?php echo $selected_f; ?> ">°F <input type="radio" value="imperial" name="units"></label> <label class="w-unit <?php echo $selected_c; ?> ">°C <input type="radio" value="metric" name="units"></label> </form> </div> </div> <div class="weather-data-wrap"> <span class="not-valid-city <?php echo $val_class; ?> "><?php _e('Not found', 'framework'); ?> <i class="brankic-icon-error"></i></span> <div class="today-weather-box"> <div class="t-w-title"> <h2><?php if ($display != '') { echo $display; } else { echo $city_name; } ?> </h2> <div class="weather-date"><span></span><?php echo $this_day; ?> </div> </div> <div class="weather-results"> <div class="weather-results-status"><?php echo $today_desc; ?> </div> <div class="weather-icon"> <?php echo $base_cloud; ?> <i class="<?php echo $today_icon_class; ?> "></i> </div> <span><?php echo $today_temp . $x; ?> </span> </div> </div> <div class="week-weather-wrap"> <ul class="week-weather-box"> <?php $count = 0; $i = 1; foreach ($daily_weather_data->forecast->time as $day) { if ($count++ < 1) { continue; } $today = new DateTime($today_date); $date = $today->add(new DateInterval('P' . $i . 'D')); $desc = $day->symbol['name']; $icon = $day->symbol['var']; $clouds = $day->clouds['all'] . $day->clouds['unit']; $humidity = $day->humidity['value'] . $day->humidity['unit']; $wind = $day->windSpeed['mps']; $wind_dir = $day->windDirection['code']; $min_temp = (int) $day->temperature['min']; $max_temp = (int) $day->temperature['max']; $pressure = (int) $day->pressure['value'] . $day->pressure['unit']; $base_cloud = '<i class="basecloud"></i>'; switch ($icon) { case '01d': $icon_class = 'icon-sun'; $base_cloud = ''; break; case '01n': $icon_class = 'icon-moon'; $base_cloud = ''; break; case '02d': $icon_class = 'icon-sunny'; $base_cloud = '<i class="icon-cloud"></i>'; break; case '02n': $icon_class = 'icon-night'; $base_cloud = '<i class="icon-cloud"></i>'; break; case '03d': $icon_class = 'icon-cloud'; $base_cloud = ''; break; case '03n': $icon_class = 'icon-cloud'; $base_cloud = ''; break; case '04d': $icon_class = 'icon-cloud'; $base_cloud = '<i class="icon-cloud behind"></i>'; break; case '04n': $icon_class = 'icon-cloud'; $base_cloud = '<i class="icon-cloud behind"></i>'; break; case '09d': $icon_class = 'icon-drizzle icon-sunny'; break; case '09n': $icon_class = 'icon-drizzle icon-night'; break; case '10d': $icon_class = 'icon-rainy icon-sunny'; break; case '10n': $icon_class = 'icon-rainy icon-night'; break; case '11d': $icon_class = 'icon-thunder icon-sunny'; break; case '11n': $icon_class = 'icon-thunder icon-night'; break; case '13d': $icon_class = 'icon-snowy icon-sunny'; break; case '13n': $icon_class = 'icon-snowy icon-night'; break; case '50d': $icon_class = 'icon-mist'; $base_cloud = ''; break; case '50n': $icon_class = 'icon-mist'; $base_cloud = ''; break; } switch ($date->format('D')) { case 'Fri': $d_print = __('Fri', 'framework'); break; case 'Sat': $d_print = __('Sat', 'framework'); break; case 'Sun': $d_print = __('Sun', 'framework'); break; case 'Mon': $d_print = __('Mon', 'framework'); break; case 'Tue': $d_print = __('Tue', 'framework'); break; case 'Wed': $d_print = __('Wed', 'framework'); break; case 'Thu': $d_print = __('Thu', 'framework'); break; } ?> <li> <div class="t-w-title"> <h2><?php echo $d_print; ?> </h2> <div class="weather-date"><?php echo $date->format($date_format); ?> </div> </div> <div class="weather-results"> <div class="weather-results-status"><?php echo $desc; ?> </div> <div class="weather-icon"> <?php echo $base_cloud; ?> <i class="<?php echo $icon_class; ?> "></i> </div> <span><?php echo $max_temp . $x; ?> </span> <small><?php echo $min_temp . $x; ?> </small> </div> </li> <?php $i++; } ?> </ul> <div class="find-weather-box"> <span><?php _e('Find a Forecast', 'framework'); ?> </span> <form action="<?php the_permalink(); ?> " method="post" id="find-weather"> <input type="text" name="location" id="locator-form-search" class="<?php echo $invalid_input; ?> " value="" placeholder="<?php _e('Search for a location', 'framework'); ?> " title="<?php _e('Search for a location', 'framework'); ?> " maxlength="75"></span> </form> </div> </div> <!--week weather wrap--> </div> <!--weather data wrap--> </div> </section> <?php } //end if the xml not json error }