Viewing file: biorhythm.php (6.47 KB) -rw-rw-rw- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
include("langsettings.php");
// Biorhythm by Till Gerken
// http://www.zend.com/zend/tut/dynamic.php
//
// Multi-language support by Kai Oswald Seidler, 2003
//
// Print a standard page header
//
function pageHeader()
{
global $TEXT;
print("<html><head>");
print("<title>Biorhythm with PHP</title>");
print('<link href="xampp.css" rel="stylesheet" type="text/css">');
print("</head><body>");
print(" <p><h1>".$TEXT['bio-head']."</h1>");
print($TEXT['bio-by']." Till Gerken<br><a class=black href=http://www.zend.com/zend/tut/dynamic.php>http://www.zend.com/zend/tut/dynamic.php</a><p>");
}
//
// Print a standard page footer
//
function pageFooter()
{
include("lang/".file_get_contents("lang.tmp").".php");
include("showcode.php");
print("</body></html>");
}
//
// Function to draw a curve of the biorythm
// Parameters are the day number for which to draw,
// period of the specific curve and its color
//
function drawRhythm($daysAlive, $period, $color)
{
global $daysToShow, $image, $diagramWidth, $diagramHeight;
// get day on which to center
$centerDay = $daysAlive - ($daysToShow / 2);
// calculate diagram parameters
$plotScale = ($diagramHeight - 25) / 2;
$plotCenter = ($diagramHeight - 25) / 2;
// draw the curve
for($x = 0; $x <= $daysToShow; $x++)
{
// calculate phase of curve at this day, then Y value
// within diagram
$phase = (($centerDay + $x) % $period) / $period * 2 * pi();
$y = 1 - sin($phase) * (float)$plotScale + (float)$plotCenter;
// draw line from last point to current point
if($x > 0)
imageLine($image, $oldX, $oldY,
$x * $diagramWidth / $daysToShow, $y, $color);
// save current X/Y coordinates as start point for next line
$oldX = $x * $diagramWidth / $daysToShow;
$oldY = $y;
}
}
//
// ---- MAIN PROGRAM START ----
// check if we already have a date to work with,
// if not display a form for the user to enter one
if(!isset($_REQUEST['birthdate']))
{
pageHeader();
?>
<form method="get" action="biorhythm.php">
<!-- Please enter your birthday: -->
<?php print $TEXT['bio-ask']; ?>:
<br>
<input type="text" name="birthdate" value="MM/DD/YYYY"><p>
<input type=submit value="<?php print $TEXT['bio-ok']; ?>">
<input type="hidden" name="showpng" value=1>
</form>
<?php
pageFooter();
exit();
}
// get different parts of the date
$birthMonth = substr($_REQUEST['birthdate'], 0, 2);
$birthDay = substr($_REQUEST['birthdate'], 3, 2);
$birthYear = substr($_REQUEST['birthdate'], 6, 4);
// check date for validity, display error message if invalid
if(!checkDate($birthMonth, $birthDay, $birthYear))
{
pageHeader();
//print("The date '$birthMonth/$birthDay/$birthYear' is invalid.");
print("<h2>".$TEXT['bio-error1']." '$birthMonth/$birthDay/$birthYear' ".$TEXT['bio-error2'].".</h2>");
pageFooter();
exit();
}
if(@$_REQUEST['showpng']==1)
{
pageHeader();
echo "<img src=\"biorhythm.php?birthdate=".urlencode($_REQUEST['birthdate'])."\">";
pageFooter();
exit();
}
// specify diagram parameters (these are global)
$diagramWidth = 710;
$diagramHeight = 400;
$daysToShow = 30;
// calculate the number of days this person is alive
// this works because Julian dates specify an absolute number
// of days -> the difference between Julian birthday and
// "Julian today" gives the number of days alive
$daysGone = abs(gregorianToJD($birthMonth, $birthDay, $birthYear)
- gregorianToJD(date( "m"), date( "d"), date( "Y")));
// create image
$image = imageCreate($diagramWidth, $diagramHeight);
// allocate all required colors
$colorBackgr = imageColorAllocate($image, 192, 192, 192);
$colorForegr = imageColorAllocate($image, 255, 255, 255);
$colorGrid = imageColorAllocate($image, 0, 0, 0);
$colorCross = imageColorAllocate($image, 0, 0, 0);
$colorPhysical = imageColorAllocate($image, 0, 0, 255);
$colorEmotional = imageColorAllocate($image, 255, 0, 0);
$colorIntellectual = imageColorAllocate($image, 0, 255, 0);
// clear the image with the background color
imageFilledRectangle($image, 0, 0, $diagramWidth - 1, $diagramWidth - 1, $colorBackgr);
// calculate start date for diagram and start drawing
$nrSecondsPerDay = 60 * 60 * 24;
$diagramDate = time() - ($daysToShow / 2 * $nrSecondsPerDay)
+ $nrSecondsPerDay;
for ($i = 1; $i < $daysToShow; $i++)
{
$thisDate = getDate($diagramDate);
$xCoord = ($diagramWidth / $daysToShow) * $i;
// draw day mark and day number
imageLine($image, $xCoord, $diagramHeight - 25, $xCoord,
$diagramHeight - 20, $colorGrid);
imageString($image, 3, $xCoord - 5, $diagramHeight - 16,
$thisDate[ "mday"], $colorGrid);
$diagramDate += $nrSecondsPerDay;
}
// draw rectangle around diagram (marks its boundaries)
imageRectangle($image, 0, 0, $diagramWidth - 1, $diagramHeight - 20,
$colorGrid);
// draw middle cross
imageLine($image, 0, ($diagramHeight - 20) / 2, $diagramWidth,
($diagramHeight - 20) / 2, $colorCross);
imageLine($image, $diagramWidth / 2, 0, $diagramWidth / 2, $diagramHeight - 20,
$colorCross);
// print descriptive text into the diagram
imageString($image, 3, 10, 10, $TEXT['bio-birthday'].": $birthDay.$birthMonth.$birthYear",
$colorCross);
imageString($image, 3, 10, 26, $TEXT['bio-today'].": ". date( "d.m.Y"), $colorCross);
imageString($image, 3, 10, $diagramHeight - 42, $TEXT['bio-physical'], $colorPhysical);
imageString($image, 3, 10, $diagramHeight - 58, $TEXT['bio-emotional'], $colorEmotional);
imageString($image, 3, 10, $diagramHeight - 74, $TEXT['bio-intellectual'], $colorIntellectual);
// now draw each curve with its appropriate parameters
drawRhythm($daysGone, 23, $colorPhysical);
drawRhythm($daysGone, 28, $colorEmotional);
drawRhythm($daysGone, 33, $colorIntellectual);
// set the content type
header("Content-type: image/png");
// create an interlaced image for better loading in the browser
imageInterlace($image, 1);
// mark background color as being transparent
imageColorTransparent($image, $colorBackgr);
// now send the picture to the client (this outputs all image data directly)
imagePNG($image);
?>
|