HEX
Server: Apache
System: Linux webm010.cluster103.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
User: iestorre (46869)
PHP: 8.0.30
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/iestorre/biologia/modules/mod_weather_jclock/mod_weather_jclock_functions.php
<?php

/**
* @Copyright Copyright (c) 2010 M. Bollmann
* @license GNU/GPL http://www.gnu.org/copyleft/gpl.html
**/

// Weather J.Clock -Module
// Weather J.Clock creates a JavaScript digitalclock with weather display based on the globally available METAR weather data
//
// **************************************************************************
// Parts of the METAR-fetching Code by Vasco Nunes / INNATO BV from the great MambWeather Module
// Weather Icons by J. Correa - www.jcorrea.es
// **************************************************************************

defined( '_JEXEC' ) or die( 'Restricted access' );



function fetchmetar($metarcode,$cachezeit,$metar_mode)
{
$metar_cache= JPATH_SITE."/modules/mod_weather_jclock/".$metarcode."_cache.txt";

if (file_exists($metar_cache)) {
$cache_age=(time()-filemtime($metar_cache));
}
if (isset($cache_age) && $cache_age < $cachezeit && file_exists($metar_cache) && filesize($metar_cache)!=0)
{
    $fp 	= @fopen($metar_cache, "r");
    $metar	= @fread($fp, filesize($metar_cache));
    @fclose($fp);
} else
{

 if (($metar_mode !== 'HTTP') AND ($metar_mode !== 'FTP'))
	$metar_mode = 'HTTP';
	
if ($metar_mode == 'FTP') {

	$requestor_url = substr(htmlspecialchars( JRoute::_($url) ),7);
	$requestor_url = substr($requestor_url,0,strlen($requestor_url)-1);

	$ftp_host = "tgftp.nws.noaa.gov";
	$ftp_user = "anonymous";
	$ftp_pass = $requestor_url;

	$remote_file = "/data/observations/metar/stations/".$metarcode.".TXT";


	$fp = @fopen($metar_cache, 'w');
	@fclose($fp);
	@unlink($metar_cache);

	$conn_id = ftp_connect($ftp_host);

	$login_result = ftp_login($conn_id, $ftp_user, $ftp_pass);


	if ((!$conn_id) || (!$login_result))
        exit;

        if (!ftp_get($conn_id, $metar_cache, $remote_file, FTP_BINARY))
            exit;
      
	ftp_close($conn_id);

	$fp 	= @fopen($metar_cache, "r");
	$metar	= @fread($fp, filesize($metar_cache));
	@fclose($fp);


	$metar = substr($metar, 17);

	$fp = @fopen($metar_cache, "w");
	@fwrite($fp, $metar);
	@fclose($fp);

}
if ($metar_mode == 'HTTP') {
    $host = 'weather.noaa.gov';
    $location = "/pub/data/observations/metar/stations/$metarcode.TXT";
    $request = "HTTP/1.1\r\n" .
    "If-Modified-Since: Sat, 29 Oct 1994 09:00:00 GMT\r\n" .
    "Pragma: no-cache\r\n".
    "Cache-Control: no-cache\r\n";
    @$fp = fsockopen($host, 80);
    $request = "GET $location $request" .
    "Host: $host\r\n" .
    "Content-Type: text/html\r\n" .
    "Connection: Close\r\n\r\n";
    $metar = false;
    if ($fp)
    {
        fputs($fp, $request);
        if (strpos(fgets($fp, 1024), '200 '))
        {
            do
            {
            $line = fgets($fp, 1024);
            } while ($line != "\r\n");
            while ($line = fgets($fp, 1024))
            {
                $metar = $line;
            }
            fclose($fp);
        }
    }

    if ($fp = fopen($metar_cache, "w"))
    {
        fwrite($fp, $metar);
        fclose($fp);
    }

}

}
return $metar;
}

function wcauswerten($metardata,$time) {

  $ergebnis_metar =array();
  $ergebnis_metar['himmel']['bild']= 'heiter.png';
  
  $erscheinung = array ('#'  => 'None',
                                'TS' => 'Thun',
                                'RA' => 'Rain',
                                'DZ' => 'Rain',
                                'SN' => 'Snow',
                                'SG' => 'Snow',
                                'GR' => 'Hail',
                                'GS' => 'Hail',
                                'PE' => 'Hail',
                                'IC' => 'Hail',
                                'BR' => 'Fog',
                                'FG' => 'Fog');
  
  
 $bedeckung = array ('CLR' => '0',
                         'SKC' => '0',
                         'FEW' => '1',
                         'SCT' => '2',
                         'BKN' => '3',
                         'OVC' => '4',
                         'VV'  => '4');
  
   $imagesn = array ('None'  => array ('0' => 'nsonne.png',
                                         '1' => 'nsonne.png',
                                         '2' => 'nheiter.png',
                                         '3' => 'nbewolkt.png',
                                         '4' => 'bedeckt.png'),
                       '-Rain' => array ('0' => 'nsonne.png',
                                         '1' => 'leichtregen.png',
                                         '2' => 'leichtregen.png',
                                         '3' => 'leichtregen.png',
                                         '4' => 'leichtregen.png'),
                       'Rain'  => array ('0' => 'nsonne.png',
                                         '1' => 'leichtregen.png',
                                         '2' => 'leichtregen.png',
                                         '3' => 'starkregen.png',
                                         '4' => 'starkregen.png'),
                       '+Rain' => array ('0' => 'nsonne.png',
                                         '1' => 'starkregen.png',
                                         '2' => 'starkregen.png',
                                         '3' => 'starkregen.png',
                                         '4' => 'starkregen.png'),
                       '-Snow' => array ('0' => 'sonne.png',
                                         '1' => 'schnee.png',
                                         '2' => 'schnee.png',
                                         '3' => 'schnee.png',
                                         '4' => 'schnee.png'),
                       '+Snow' => array ('0' => 'nsonne.png',
                                         '1' => 'schnee.png',
                                         '2' => 'schnee.png',
                                         '3' => 'schnee.png',
                                         '4' => 'schnee.png'),
                       '-Hail' => array ('0' => 'nsonne.png',
                                         '1' => 'hagel.png',
                                         '2' => 'hagel.png',
                                         '3' => 'hagel.png',
                                         '4' => 'hagel.png'),
                       '+Hail' => array ('0' => 'nsonne.png',
                                         '1' => 'hagel.png',
                                         '2' => 'hagel.png',
                                         '3' => 'hagel.png',
                                         '4' => 'hagel.png'),
                       'Thun'  => array ('0' => 'nsonne.png',
                                         '1' => 'gewitter.png',
                                         '2' => 'gewitter.png',
                                         '3' => 'gewitter.png',
                                         '4' => 'gewitter.png'),
                       'Fog'   => array ('0' => 'nebel.png',
                                         '1' => 'nebel.png',
                                         '2' => 'nebel.png',
                                         '3' => 'nebel.png',
                                         '4' => 'nebel.png')
                       );

 $images = array ('None'  => array ('0' => 'sonne.png',
                                         '1' => 'sonne.png',
                                         '2' => 'heiter.png',
                                         '3' => 'bewolkt.png',
                                         '4' => 'bedeckt.png'),
                       '-Rain' => array ('0' => 'sonne.png',
                                         '1' => 'leichtregen.png',
                                         '2' => 'leichtregen.png',
                                         '3' => 'leichtregen.png',
                                         '4' => 'leichtregen.png'),
                       'Rain'  => array ('0' => 'sonne.png',
                                         '1' => 'leichtregen.png',
                                         '2' => 'leichtregen.png',
                                         '3' => 'starkregen.png',
                                         '4' => 'starkregen.png'),
                       '+Rain' => array ('0' => 'sonne.png',
                                         '1' => 'starkregen.png',
                                         '2' => 'starkregen.png',
                                         '3' => 'starkregen.png',
                                         '4' => 'starkregen.png'),
                       '-Snow' => array ('0' => 'sonne.png',
                                         '1' => 'schnee.png',
                                         '2' => 'schnee.png',
                                         '3' => 'schnee.png',
                                         '4' => 'schnee.png'),
                       '+Snow' => array ('0' => 'sonne.png',
                                         '1' => 'schnee.png',
                                         '2' => 'schnee.png',
                                         '3' => 'schnee.png',
                                         '4' => 'schnee.png'),
                       '-Hail' => array ('0' => 'sonne.png',
                                         '1' => 'hagel.png',
                                         '2' => 'hagel.png',
                                         '3' => 'hagel.png',
                                         '4' => 'hagel.png'),
                       '+Hail' => array ('0' => 'sonne.png',
                                         '1' => 'hagel.png',
                                         '2' => 'hagel.png',
                                         '3' => 'hagel.png',
                                         '4' => 'hagel.png'),
                       'Thun'  => array ('0' => 'sonne.png',
                                         '1' => 'gewitter.png',
                                         '2' => 'gewitter.png',
                                         '3' => 'gewitter.png',
                                         '4' => 'gewitter.png'),
                       'Fog'   => array ('0' => 'nebel.png',
                                         '1' => 'nebel.png',
                                         '2' => 'nebel.png',
                                         '3' => 'nebel.png',
                                         '4' => 'nebel.png')
                       );

 $maxbedeckung = 0;
 $night = 0;
 $local_time = 12;

    $parts = explode(' ', $metardata);	
    $num_parts = count($parts);
    
    for ($i = 0; $i < $num_parts; $i++) {
      $part = $parts[$i];

      
      if (preg_match('/RMK|TEMPO|BECMG|INTER/', $part)) {

		for($j=$i;$j<$num_parts; $j++)
		  $ergebnis_metar['remarks'] .= ' ' . $parts[$j];
	  
		$ergebnis_metar['remarks'] = trim($ergebnis_metar['remarks']);
	 	break;
 
      } elseif (preg_match('#^(M?[0-9]{2})/(M?[0-9]{2}|//)?$#', $part, $regs)) {

        $ergebnis_metar['temperature']['temp_c'] =
          round((strtr($regs[1], 'M', '-')),1);
        $ergebnis_metar['temperature']['temp_f'] =
          round((strtr($regs[1], 'M', '-') * (9/5) + 32),1);
          
        
     
      } elseif (preg_match('/^T([0-9]{4})([0-9]{4})/', $part, $regs)) {
        

	temperaturspeichern($regs[1] / 10,
			  $ergebnis_metar['temperature']['temp_c'],
			  $ergebnis_metar['temperature']['temp_f']);
	
      } elseif (preg_match('#^T([0-9]{4}$)#', $part, $regs)) {
	temperaturspeichern($regs[1],
			  $ergebnis_metar['temperature']['temp_c'],
			  $ergebnis_metar['temperature']['temp_f']);
      } 
	  
	  elseif (preg_match('/([0-9]{2})([0-9]{2})([0-9]{2})Z/', $part, $regs)) {

			$local_time = $regs[2]+ $time;	
			if ($local_time < 0) {
				$local_time += 24;
				}
			elseif ($local_time >= 24) {
				$local_time -= 24;
			}
		
			
				if (($local_time < 5) || ($local_time >= 18)) {	
					$night = 1;
					}
			
		  }
      elseif (preg_match('/^(-|\+|VC)?(TS|SH|FZ|BL|DR|MI|BC|PR|RA|DZ|SN|SG|GR|GS|PE|IC|UP|BR|FG|FU|VA|DU|SA|HZ|PY|PO|SQ|FC|SS|DS)+$/', $part)) {

        $intensity = '';      
        if (preg_match('/^(-|\+|VC)(..)*$/',$part)) {
          if ($part[0] == '-') {
            $intensity = '-';
            $part = substr($part,1);
          } elseif ($part[0] == '+') {
            $intensity = '+';
            $part = substr($part,1);
          } elseif ($part[0] . $part[1] == 'VC') {
            $intensity = '';
            $part = substr($part,2);
          }
        }

        preg_match('/(TS|RA|DZ|SN|SG|GR|GS|PE|IC|BR|FG)(..)*$/',$part,$match);
        if (!empty($match[1])) {
          $erscheinungen = $match[1];
        } else {
          preg_match('/(..)(TS|RA|DZ|SN|SG|GR|GS|PE|IC|BR|FG)(..)*$/',$part,$match);
          if (!empty($match[2])) {
            $erscheinungen = $match[2];
          } else {
            $erscheinungen = '#';
          }
        }

        if (preg_match('/^(Snow|Hail)$/',$erscheinung[$erscheinungen])) {
          if ($intensity == '') {
            $intensity = '-';
          }
        }
            
        if (preg_match('/^(Rain|Snow|Hail)$/',$erscheinung[$erscheinungen])) {
          $erscheinungen_group = $intensity.$erscheinung[$erscheinungen];
        } else {
          $erscheinungen_group = $erscheinung[$erscheinungen];
        }	
      }   
      
      elseif (preg_match('/(SKC|CLR)(...)/', $part, $regs)) {
        $maxbedeckung = max($maxbedeckung,$bedeckung[$regs[1]]);
      }
      elseif (preg_match('/^(VV|FEW|SCT|BKN|OVC)([0-9]{3})(CB|TCU)?$/', $part, $regs)) {
        $maxbedeckung = max($maxbedeckung,$bedeckung[$regs[1]]);   
      }
    }

    if (empty($erscheinungen)) {
      $erscheinungen = '#';
      $erscheinungen_group = $erscheinung[$erscheinungen];
    }
    if ($night == 1) {
     $ergebnis_metar['himmel']['bild']= $imagesn[$erscheinungen_group][$maxbedeckung];
     } else {
	 $ergebnis_metar['himmel']['bild']= $images[$erscheinungen_group][$maxbedeckung];
	 }
    return $ergebnis_metar;		
  }
  
    function temperaturspeichern($temp, &$temp_c, &$temp_f) {

    if ($temp[0] == 1) {
      $temp[0] = '-';
    }
    $temp_c = number_format($temp,1);
    $temp_f = number_format($temp * (9/5) + 32,1);
  }
  

  

?>