weathermap |
Subversion Repositories: |
Compare with Previous - Blame - Download
<?php
function show_editor_startpage()
{
global $mapdir, $WEATHERMAP_VERSION, $config_loaded, $cacti_found, $ignore_cacti;
$matches=0;
print '<html xmlns="http://www.w3.org/1999/xhtml"><head><link rel="stylesheet" type="text/css" media="screen" href="editor.css" /> <script src="editor.js" type="text/javascript"></script><title>PHP Weathermap Editor ' . $WEATHERMAP_VERSION
. '</title></head><body>';
print '<div id="nojs" class="alert"><b>WARNING</b> - ';
print 'Sorry, it\'s partly laziness on my part, but you really need JavaScript enabled and DOM support in your browser to use this editor. It\'s a visual tool, so accessibility is already an issue, if it is, and from a security viewpoint, you\'re already running my ';
print 'code on your <i>server</i> so either you trust it all having read it, or you\'re already screwed.<P>';
print 'If it\'s a major issue for you, please feel free to complain. It\'s mainly laziness as I said, and there could be a fallback (not so smooth) mode for non-javascript browsers if it was seen to be worthwhile (I would take a bit of convincing, because I don\'t see a benefit, personally).</div>';
$errormessage = "";
if(! $cacti_found && !$ignore_cacti)
{
$errormessage .= '$cacti_base is not set correctly. Cacti integration will be disabled in the editor.';
if($config_loaded != 1) { $errormessage .= " You might need to copy editor-config.php-dist to editor-config.php and edit it."; }
}
if($errormessage != '')
{
print '<div class="alert" id="nocacti">'.$errormessage.'</div>';
}
print '<div id="withjs">';
print '<div id="dlgStart" class="dlgProperties" ><div class="dlgTitlebar">Welcome</div><div class="dlgBody">';
print 'Welcome to the PHP Weathermap '.$WEATHERMAP_VERSION.' editor.<p>';
print '<div style="border: 3px dashed red; background: #055; padding: 5px; font-size: 97%;"><b>NOTE:</b> This editor is not finished! There are many features of ';
print 'Weathermap that you will be missing out on if you choose to use the editor only.';
print 'These include: curves, node offsets, font definitions, colour changing, per-node/per-link settings and image uploading. You CAN use the editor without damaging these features if you added them by hand, however.</div><p>';
print 'Do you want to:<p>';
print 'Create A New Map:<br>';
print '<form method="GET">';
print 'Named: <input type="text" name="mapname" size="20">';
print '<input name="action" type="hidden" value="newmap">';
print '<input type="submit" value="Create">';
print '</form>';
print 'OR<br />';
print 'Open An Existing Map (looking in ' . $mapdir . '):<ul class="filelist">';
$titles = array();
if (is_dir($mapdir))
{
$n=0;
$dh=opendir($mapdir);
if ($dh)
{
while ($file=readdir($dh))
{
$realfile=$mapdir . DIRECTORY_SEPARATOR . $file;
// if(is_file($realfile) && ( preg_match('/\.conf$/',$file) ))
if ( (is_file($realfile)) && (is_readable($realfile)) )
{
$title='(no title)';
$fd=fopen($realfile, "r");
if($fd)
{
while (!feof($fd))
{
$buffer=fgets($fd, 4096);
if (preg_match("/^\s*TITLE\s+(.*)/i", $buffer, $matches)) { $title=$matches[1]; }
}
fclose ($fd);
$titles[$file] = $title;
# print "<li><a href=\"?mapname=$file\">$file</a> - <span class=\"comment\">$title</span></li>\n";
$n++;
}
}
}
closedir ($dh);
}
else { print "<LI>Can't Open mapdir to read</LI>"; }
ksort($titles);
foreach ($titles as $file=>$title)
{
$title = $titles[$file];
print "<li><a href=\"?mapname=$file\">$file</a> - <span class=\"comment\">$title</span></li>\n";
}
if ($n == 0) { print "<LI>No files</LI>"; }
}
else { print "<LI>NO DIRECTORY named $mapdir</LI>"; }
print "</UL>";
print "</div>"; // dlgbody
print '<div class="dlgHelp" id="start_help">PHP Weathermap ' . $WEATHERMAP_VERSION
. ' Copyright © 2005-2007 Howard Jones - howie@thingy.com<br />The current version should always be <a href="http://www.network-weathermap.com/">available here</a>, along with other related software. PHP Weathermap is licensed under the GNU Public License, version 2. See COPYING for details. This distribution also includes the Overlib library by Erik Bosrup.</div>';
print "</div>"; // dlgStart
print "</div>"; // withjs
print "</body></html>";
}
function snap($coord, $gridsnap = 0)
{
if ($gridsnap == 0) { return ($coord); }
else { return ($coord - ($coord % $gridsnap)); }
}
// Following function is based on code taken from here:
// http://uk2.php.net/manual/en/security.globals.php
//
// It extracts a set of named variables into the global namespace,
// validating them as they go. Returns True or False depending on if
// validation fails. If it does fail, then nothing is added to the
// global namespace.
//
function extract_with_validation($array, $paramarray, $prefix = "", $debug = FALSE)
{
$all_present=TRUE;
$candidates=array(
);
if ($debug)
print '<pre>';
if ($debug)
print_r ($paramarray);
if ($debug)
print_r ($array);
foreach ($paramarray as $var)
{
$varname=$var[0];
$vartype=$var[1];
$varreqd=$var[2];
if ($varreqd == 'req' && !array_key_exists($varname, $array)) { $all_present=FALSE; }
if (array_key_exists($varname, $array))
{
$varvalue=$array[$varname];
if ($debug)
print "Checking $varname...";
$waspresent=$all_present;
switch ($vartype)
{
case 'int':
if (!preg_match('/^\-*\d+$/', $varvalue)) { $all_present=FALSE; }
break;
case 'float':
if (!preg_match('/^\d+\.\d+$/', $varvalue)) { $all_present=FALSE; }
break;
case 'yesno':
if (!preg_match('/^(y|n|yes|no)$/i', $varvalue)) { $all_present=FALSE; }
break;
case 'sqldate':
if (!preg_match('/^\d\d\d\d\-\d\d\-\d\d$/i', $varvalue)) { $all_present=FALSE; }
break;
case 'any':
// we don't care at all
break;
case 'ip':
if (!preg_match(
'/^((\d|[1-9]\d|2[0-4]\d|25[0-5]|1\d\d)(?:\.(\d|[1-9]\d|2[0-4]\d|25[0-5]|1\d\d)){3})$/',
$varvalue)) { $all_present=FALSE; }
break;
case 'alpha':
if (!preg_match('/^[A-Za-z]+$/', $varvalue)) { $all_present=FALSE; }
break;
case 'alphanum':
if (!preg_match('/^[A-Za-z0-9]+$/', $varvalue)) { $all_present=FALSE; }
break;
case 'bandwidth':
if (!preg_match('/^\d+\.?\d*[KMGT]*$/i', $varvalue)) { $all_present=FALSE; }
break;
default:
// an unknown type counts as an error, really
$all_present=FALSE;
break;
}
if ($debug && $waspresent != $all_present) { print "Failed on $varname."; }
if ($all_present)
{
$candidates["{$prefix}{$varname}"]=$varvalue;
$candidates["{$prefix}{$varname}_slashes"]=addslashes($varvalue);
$candidates["{$prefix}{$varname}_url"]=urlencode($varvalue);
$candidates["{$prefix}{$varname}_html"]=htmlspecialchars($varvalue);
$candidates["{$prefix}{$varname}_url_html"]=htmlspecialchars(urlencode($varvalue));
}
}
else
{
if ($debug)
print "Skipping $varname\n";
}
}
if ($debug)
print_r ($candidates);
if ($all_present)
{
foreach ($candidates as $key => $value) { $GLOBALS[$key]=$value; }
}
if ($debug)
print '</pre>';
return ($all_present);
}
function get_imagelist($imagedir)
{
$imagelist = array();
if (is_dir($imagedir))
{
$n=0;
$dh=opendir($imagedir);
if ($dh)
{
while ($file=readdir($dh))
{
$realfile=$imagedir . DIRECTORY_SEPARATOR . $file;
$uri = $imagedir . "/" . $file;
if(is_file($realfile) && ( preg_match('/\.(gif|jpg|png)$/i',$file) ))
{
$imagelist[] = $uri;
$n++;
}
}
closedir ($dh);
}
}
return ($imagelist);
}
function handle_inheritance(&$map, &$inheritables)
{
foreach ($inheritables as $inheritable)
{
$fieldname = $inheritable[1];
$formname = $inheritable[2];
$new = $_REQUEST[$formname];
$old = ($inheritable[0]=='node' ? $map->defaultnode->$fieldname : $map->defaultlink->$fieldname);
if($old != $new)
{
if($inheritable[0]=='node')
{
$map->defaultnode->$fieldname = $new;
foreach ($map->nodes as $node)
{
if($node->$fieldname == $old)
{
$map->nodes[$node->name]->$fieldname = $new;
}
}
}
if($inheritable[0]=='link')
{
$map->defaultlink->$fieldname = $new;
foreach ($map->links as $link)
{
if($link->$fieldname == $old)
{
$map->links[$link->name]->$fieldname = $new;
}
}
}
}
}
}
function get_fontlist(&$map,$name,$current)
{
$output = '<select class="fontcombo" name="'.$name.'">';
# $sortedfonts = $map->fonts;
# ksort ($sortedfonts);
ksort($map->fonts);
foreach ($map->fonts as $fontnumber => $font)
{
$output .= '<option ';
if($current == $fontnumber) $output .= 'SELECTED';
$output .= ' value="'.$fontnumber.'">'.$fontnumber.' ('.$font->type.')</option>';
}
$output .= "</select>";
return($output);
}
// vim:ts=4:sw=4:
?>