// publication, or educational product without permission from O'Reilly &
// Associates. No warranty is attached; we cannot take responsibility for errors
// or fitness for use.
// This is the script that allows the to search and browse wines, and
// to select wines to add to their shopping cart
require_once "../includes/template.inc";
require_once "../includes/winestore.inc";
set_error_handler("customHandler");
session_start();
// Takes <form> heading, instructions, action, formVars name, and
// formErrors name as parameters
$template = new winestoreFormTemplate("Search", "Choose regions and wine types to browse.", S_SEARCH, "searchFormVars", NULL, "GET");
$connection = DB::connect($dsn, true);
if (DB::isError($connection)) {
    trigger_error($connection->getMessage(), E_USER_ERROR);
}
// Create the drop-down search widgets for the page
// Load the regions from the region table
$regionResult = $connection->query("SELECT * FROM region");
if (DB::isError($regionResult)) {
    trigger_error($regionResult->getMessage(), E_USER_ERROR);
}
// Load the wine types from the wine_type table
$wineTypeResult = $connection->query("SELECT * FROM wine_type");
if (DB::isError($wineTypeResult)) {
    trigger_error($wineTypeResult->getMessage(), E_USER_ERROR);
}
$template->selectWidget("region_name", "Region name:", "region_name", $regionResult);
$template->selectWidget("wine_type", "Wine type:", "wine_type", $wineTypeResult);
$template->showWinestore(NO_CART, B_HOME | B_SHOW_CART | B_LOGINLOGOUT);
//
// Unless otherwise stated, the source code distributed with this book can be
// redistributed in source or binary form so long as an acknowledgment appears
// in derived source files.
// The citation should list that the code comes from Hugh E. Williams and David
// Lane, "Web Database Application with PHP and MySQL" published by O'Reilly &
// Associates.
//
// This code is under copyright and cannot be included in any other book,
// publication, or educational product without permission from O'Reilly &
// Associates. No warranty is attached; we cannot take responsibility for errors
// or fitness for use.
// This script allows a user to enter their credit card number
// and delivery instructions.
// The user must be logged in to view it.
require_once "../includes/template.inc";
require_once "../includes/winestore.inc";
require_once "../includes/authenticate.inc";
set_error_handler("customHandler");
session_start();
// Check the user is properly logged in
sessionAuthenticate(S_SHOWCART);
// Takes form heading, instructions, action, formVars name, and
// formErrors name as parameters
$template = new winestoreFormTemplate("Finalise Your Order", "Please enter your SurchargeCard details " . "(Try: 8000000000001001 ) and delivery instructions.", S_ORDER_2, "ccFormVars", "ccErrors");
// Create the credit card widgets
$template->mandatoryWidget("creditcard", "SurchargeCard:", 16);
$template->mandatoryWidget("expirydate", "Expiry Date (mm/yy):", 5);
$template->optionalWidget("instructions", "Delivery Instructions:", 128);
$template->showWinestore(SHOW_ALL, B_SHOW_CART | B_HOME);
}
// Load the titles from the title table
$titleResult = $connection->query("SELECT * FROM titles");
if (DB::isError($titleResult)) {
    trigger_error($titleResult->getMessage(), E_USER_ERROR);
}
// Load the countries from the country table
$countryResult = $connection->query("SELECT * FROM countries");
if (DB::isError($countryResult)) {
    trigger_error($countryResult->getMessage(), E_USER_ERROR);
}
// Create widgets for each of the customer fields
$template->selectWidget("title_id", "Title:", "title", $titleResult);
$template->mandatoryWidget("firstname", "First name:", 50);
$template->mandatoryWidget("surname", "Surname:", 50);
$template->optionalWidget("initial", "Middle initial:", 1);
$template->mandatoryWidget("address", "Address:", 50);
$template->mandatoryWidget("city", "City:", 50);
$template->optionalWidget("state", "State:", 20);
$template->mandatoryWidget("zipcode", "Zip code:", 10);
$template->selectWidget("country_id", "Country:", "country", $countryResult);
$template->optionalWidget("phone", "Telephone:", 15);
$template->mandatoryWidget("birth_date", "Date of Birth (dd/mm/yyyy):", 10);
// Only show the username/email and password widgets to new users
if (!isset($_SESSION["loginUsername"])) {
    $template->mandatoryWidget("loginUsername", "Email/username:"******"loginPassword", "Password:", 15);
}
// Add buttons and messages, and show the page
$template->showWinestore(NO_CART, B_ALL & ~B_EMPTY_CART & ~B_UPDATE_CART & ~B_PURCHASE & ~B_DETAILS & ~B_LOGINLOGOUT);
//
// Unless otherwise stated, the source code distributed with this book can be
// redistributed in source or binary form so long as an acknowledgment appears
// in derived source files.
// The citation should list that the code comes from Hugh E. Williams and David
// Lane, "Web Database Application with PHP and MySQL" published by O'Reilly &
// Associates.
//
// This code is under copyright and cannot be included in any other book,
// publication, or educational product without permission from O'Reilly &
// Associates. No warranty is attached; we cannot take responsibility for errors
// or fitness for use.
// This script shows the user a <form> to change their password
// The user must be logged in to view it.
require_once "../includes/template.inc";
require_once "../includes/winestore.inc";
require_once "../includes/authenticate.inc";
set_error_handler("customHandler");
session_start();
// Check the user is properly logged in
sessionAuthenticate(S_MAIN);
// Takes <form> heading, instructions, action, formVars name, and formErrors
// name as parameters
$template = new winestoreFormTemplate("Change Password", "Please enter your existing and new passwords.", S_CHANGEPASSWORD, "pwdFormVars", "pwdErrors");
// Create the password change widgets
$template->passwordWidget("currentPassword", "Current Password:"******"newPassword1", "New Password:"******"newPassword2", "Re-enter New Password:", 8);
// Add buttons and messages, and show the page
$template->showWinestore(NO_CART, B_HOME);