Mercurial > hg > extraction-interface
diff _xampp/biorhythm.php @ 0:b12c99b7c3f0
commit for previous development
author | Zoe Hong <zhong@mpiwg-berlin.mpg.de> |
---|---|
date | Mon, 19 Jan 2015 17:13:49 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/_xampp/biorhythm.php Mon Jan 19 17:13:49 2015 +0100 @@ -0,0 +1,206 @@ +<?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: --> + <?=$TEXT['bio-ask']?>: + <br> + <input type="text" name="birthdate" value="MM/DD/YYYY"><p> + <input type=submit value="<?=$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); + +?>