<?php 
    session_start();
?>
<!DOCTYPE html>
<html>

<!-- try-trio.php

    playing with session variables to control a multi-page application -
    includes a common complaint-page function
    by: Sharon Tuttle
    last modified: 4-25-13
-->

<head>
    <title> try-trio.php </title>
    <meta charset="utf-8" />
</head>

<body>
<?php
    // in a multi-page PHP document, it is BETTER STYLE to
    //    handle each page/case in a separate function --
    //    see how much easier, here, it is to get an idea
    //    of the "overall" application flow?

    if (!isset($_SESSION['next_page']))
    {
        request_name();
    }
    elseif ($_SESSION['next_page'] == "quest")
    {
        request_quest();
    }
    elseif ($_SESSION['next_page'] == "color")
    {
        request_color();
    }
    elseif ($_SESSION['next_page'] == "farewell")
    {
        show_farewell();
    }
    else // was it anything else?! request name...
    {
        request_name();
    }

    //-----
    // function: request_name
    // purpose: expects nothing, and makes a form to ask for user's name
    //-----

    function request_name()
    {
        print <<<PAGE_NAME
            <h1> WHAT is your NAME? </h1> 
                 <form method="post" action="$_SERVER[PHP_SELF]">
                     <p>
                     <input type="text" name="name" />
                     <input type="submit" value="Submit it" />
                     </p>
                 </form>
PAGE_NAME;
        $_SESSION['next_page'] = "quest";
    }

    //-----
    // function: make_complaint
    // purpose: expects a string saying what should have been
    //          entered that wasn't, and prints a complaint screen
    //          complaining about this, destroying the current
    //          session so that the submit button will lead
    //          again to the opening screen
    //-----

    function make_complaint($missing_info_type)
    {
        print <<<RUN_AWAY
        <h1> Need to enter a $missing_info_type...! </h1>
             <form method="post" action="$_SERVER[PHP_SELF]">
             <p>
                 <input type="submit" value="Try again!" />
             </p>
             </form>
RUN_AWAY;
        session_destroy();
    }

    //-----
    // function: request_quest
    // purpose: expects nothing, read user's name from form requesting
    //          this action, and use that name in creating a form asking for
    //          his/her quest
    //-----

    function request_quest()
    {
        // if get here -- $_POST['name'] should be set, right?

        if (!isset($_POST['name']) || ($_POST['name'] == ""))
        {
            make_complaint("name");
        }

        // otherwise, it should be safe to proceed...?        

        else
        {
            $name = htmlspecialchars($_POST['name']);

            $_SESSION['name'] = $name;

            print <<<PAGE_QUEST
                <h1> Well, $name, WHAT is your quest? </h1>
                     <form method="post" action="$_SERVER[PHP_SELF]">
                         <p>
                         <input type="text" name="quest" />
                         <input type="submit" value="Submit it" />
                         </p>
                     </form>
PAGE_QUEST;
            $_SESSION['next_page'] = "color";
        }
    }        

    //-----
    // function: request_color
    // purpose: expects nothing, read user's quest from form requesting
    //          this action, and uses name from earlier in the session and
    //          this new quest in creating a form asking for his/her 
    //          favorite color
    //-----

    function request_color()
    {
        // if get here -- $_POST['quest'] should be set, right?

        if (!isset($_POST['quest']) || ($_POST['quest'] == ""))
        {
            make_complaint("quest! Run Away");
        }

        // otherwise, it should be safe to proceed...?        

        else
        {
            $name = $_SESSION['name'];
            $quest = htmlspecialchars($_POST['quest']);

            $_SESSION['quest'] = $quest;

            print <<<PAGE_COLOR
                <h1> AHA - $name, <br />
                     your quest: $quest <br />
                     is NOBLE indeed! <br /><br />
                     BUT - WHAT is your FAVORITE COLOR? </h1>
                     <form method="post" action="$_SERVER[PHP_SELF]">
                         <p>
                         <input type="text" name="color" />
                         <input type="submit" value="Submit it" />
                          </p>
                     </form>
PAGE_COLOR;
            $_SESSION['next_page'] = "farewell";
        }
    }        

    //-----
    // function: show_farewell
    // purpose: expects nothing, read user's color from form requesting 
    //     this action, and use name and quest from earlier in the session
    //     and this new color in creating a form bidding this user farewell.
    //-----

    function show_farewell()
    {
        // if get here -- $_POST['color'] should be set, right?

        if (!isset($_POST['color']) || ($_POST['color'] == ""))
        {
            make_complaint("color! Run Away");
        }

        // otherwise, it should be safe to proceed...?        

        else
        {
            $name = $_SESSION['name'];
            $quest = $_SESSION['quest'];
            $color = strip_tags($_POST['color']);

            print <<<PAGE_FAREWELL
                <h1> AHA - $name, <br />
                     lover of the gentle hue of $color, <br />
                     I let you pass, and wish you WELL on your quest: <br />
                     $quest 
                     </h1> 
                     <form method="post" action="$_SERVER[PHP_SELF]">
                         <p>
                         <input type="submit" value="Return to Beginning" />
                         </p>
                     </form>
PAGE_FAREWELL;
            session_destroy();
        }
    }        

    require("my-std-footer.html");
?>