From b96b165b21542f7d79066df51db0ba41f47fb052 Mon Sep 17 00:00:00 2001 From: peter Date: Sat, 17 Nov 2007 23:09:49 +0000 Subject: [PATCH] - added changing of ticket amounts in cart - added deleting of tickets in cart - added order login git-svn-id: https://silmor.de/svn/softmagic/smoke/trunk@78 6e3c4bff-ac9f-4ac1-96c5-d2ea494d3e33 --- www/inc/cart.php | 7 +- www/inc/cart_listing.php | 45 ++++++++--- www/inc/event.php | 2 +- www/inc/event_listing.php | 1 + www/inc/global_variables.php | 18 +++++ www/inc/language_manager.php | 20 +++++- www/inc/order_listing.php | 42 ++++++++++ www/inc/submit.php | 160 +++++++++++++++++++++++++++++++++++++-- www/index.php | 12 ++- www/template/de/cart.html | 27 +++++-- www/template/de/lang.po | 48 ++++++++++-- www/template/de/orderlogin.html | 20 +++++ www/template/de/userlogin.html | 18 +++++ 13 files changed, 377 insertions(+), 43 deletions(-) create mode 100644 www/inc/global_variables.php create mode 100644 www/inc/order_listing.php create mode 100644 www/template/de/orderlogin.html create mode 100644 www/template/de/userlogin.html diff --git a/www/inc/cart.php b/www/inc/cart.php index ff26359..131cfbe 100644 --- a/www/inc/cart.php +++ b/www/inc/cart.php @@ -163,10 +163,13 @@ class Cart /**use this to get tickets by eventid; returns false if it does not exist*/ public function getTicketsByEvent($eventid) { + global $db; $where="cartid=".$db->escapeString($this->cartid)." AND eventid=".$db->escapeInt($eventid); $res=$db->select("cart_ticket","*",$where); - if(count($res>0)) - return new CartTicket($res[0]["cartid"],$res[0]["eventid"],$res[0]["amount"]); + if(count($res) > 0) + return new CartTicket($res[0]["cartid"],$res[0]["eventid"],$res[0]["amount"]); + else + return false; } /**use this to add tickets, returns new CartTicket object or false if the event does not exist or is cancelled*/ diff --git a/www/inc/cart_listing.php b/www/inc/cart_listing.php index 0db1cc8..bd3f9a9 100644 --- a/www/inc/cart_listing.php +++ b/www/inc/cart_listing.php @@ -9,20 +9,21 @@ // +---------------------------------------------------------------------- // +/** creates the cart overview */ function createCartOverview() { global $parser; $error = ErrorManager::singleton(); $lang = LanguageManager::singleton(); - $COOKIE_NAME = "ms_cartid"; - $cart = new Cart($_COOKIE[$COOKIE_NAME]); + $cart = new Cart($_COOKIE[COOKIE_NAME]); $p = new Parser("cart.html"); - $details = ""; + $tablerows = ""; $totalsum = 0; + $hiddenfields = ""; // get tickets from cart foreach ($cart->getTickets() as $ticket) @@ -32,26 +33,49 @@ function createCartOverview() // set event details $p->setVars($event->getParserData()); - $p->setVar("AMOUNT", $ticket->getAmount()); + + // if no error exists set values of database, else values of submit + if (!$error->exists()) { + $p->setVar("AMOUNT", $ticket->getAmount()); + } else { + $ticketAmounts = $_POST["ms_amount"]; + $eventIDs = $_POST["ms_event"]; + $amountValue = $ticketAmounts[array_search($event->getEventId(),$eventIDs)]; + $p->setVar("AMOUNT", $amountValue); + } + + $p->setVar("linkDELETEROW", "index.php?mode=cart&action=deleteEvent&event=".$event->getEventId()); + $p->setVar("fieldAMOUNT", "ms_amount[]"); + + // fill hidden fields + $hiddenfields .= "getEventId()."\" />\n"; $rowsum = $ticket->getAmount()*$event->getDefaultPrice(); $p->setVar("ROWSUM", $lang->getPrice($rowsum)); $totalsum += $rowsum; - $details .= $p->parse($cartRowTmpl); + $tablerows .= $p->parse($cartRowTmpl); } - $p->setVar("TABLEROWS", $details); + // if no tickets in cart set EMPTYROWS + if (count($cart->getTickets()) == 0) { + $tablerows = $p->getVar("EMPTYROWS"); + } + + $p->setVar("TABLEROWS", $tablerows); $p->setVar("TOTALSUM", $lang->getPrice($totalsum)); - $p->setVar("fieldAMOUNT", "ms_amount[]"); + // set buttons $p->setVar("buttonSAVE", "ms_save"); - $p->setVar("buttonORDER", "ms_order"); + $p->setVar("buttonORDER", "ms_goToOrder"); + // set hidden fields + $p->setVar("IS_HIDDEN", "true"); + $p->setVar("HIDDENAREA", $hiddenfields); // set error message if ($error->exists()) { - $p->setVar("ERROR", "true"); + $p->setVar("IS_ERROR", "true"); $p->setVar("ERRORAREA", $error->getAllFormatted()); } @@ -59,5 +83,4 @@ function createCartOverview() $parser->setVAR("PAGE", $p->parseFile("cart.html")); } - -?> +?> \ No newline at end of file diff --git a/www/inc/event.php b/www/inc/event.php index 1b6cd0a..df203f3 100644 --- a/www/inc/event.php +++ b/www/inc/event.php @@ -122,7 +122,7 @@ class Event { $lang = LanguageManager::singleton(); - return array("DATE"=>$lang->getDate($this->getStartTime()), "TIME"=>$lang->getTime($this->getStartTime()), "PLACE"=>$this->getRoomId(), "EVENTNAME"=>$this->getTitle(), "ARTIST"=>$this->getArtist(),"PRICE"=>$lang->getPrice($this->getDefaultPrice()), "ID"=>$this->getEventId(), "DESCRIPTION"=>$this->getDescription()); + return array("DATE"=>$lang->getDate($this->getStartTime()), "TIME"=>$lang->getTime($this->getStartTime()), "PLACE"=>$this->getRoomId(), "EVENTNAME"=>$this->getTitle(), "ARTIST"=>$this->getArtist(),"PRICE"=>$lang->getPrice($this->getDefaultPrice()), "ID"=>$this->getEventId(), "DESCRIPTION"=>$this->getDescription(), "LINK"=>""); } /**returns how many tickets can still be sold*/ diff --git a/www/inc/event_listing.php b/www/inc/event_listing.php index 90444c9..9840db0 100644 --- a/www/inc/event_listing.php +++ b/www/inc/event_listing.php @@ -49,6 +49,7 @@ function createEventDetails() if (!$event->exists()) { header("Location:index.php"); + return; } // set event details diff --git a/www/inc/global_variables.php b/www/inc/global_variables.php new file mode 100644 index 0000000..47190a9 --- /dev/null +++ b/www/inc/global_variables.php @@ -0,0 +1,18 @@ + +// +---------------------------------------------------------------------- +// | +// | Copyright: See COPYING file that comes with this distribution +// +---------------------------------------------------------------------- +// + +define("COOKIE_NAME", "ms_cartid"); + +$lang = LanguageManager::singleton(); +$error = ErrorManager::singleton(); +$parser = new Parser(); + +?> diff --git a/www/inc/language_manager.php b/www/inc/language_manager.php index a0f8d23..d83a6b1 100644 --- a/www/inc/language_manager.php +++ b/www/inc/language_manager.php @@ -9,6 +9,7 @@ // +---------------------------------------------------------------------- // +/** function to replace gettext */ function i18n($key) { $lang = LanguageManager::singleton(); @@ -22,6 +23,19 @@ function i18n($key) } } +/** replaces each {number} in a string with its equivalent in the array +{1} => array[0] */ +function string_format($string, $array) +{ + $num = count($array); + + for ($i=0; $i < $num; $i++) { + $string = str_replace("{".($i+1)."}", $array[$i], $string); + } + + return $string; +} + class LanguageManager { private static $COOKIE_NAME = "ms_lang"; @@ -37,9 +51,11 @@ class LanguageManager $this->templateFolder = $template; //default fallback for empty setting - if($this->templateFolder=="")$this->templateFolder="./template/"; + if($this->templateFolder == "") + $this->templateFolder = "./template/"; //make sure it ends with / - if(substr($this->templateFolder,-1,1)!="/")$this->templateFolder.="/"; + if(substr($this->templateFolder,-1,1) != "/") + $this->templateFolder .= "/"; // check if cookie is set if (isset($_COOKIE[self::$COOKIE_NAME])) { diff --git a/www/inc/order_listing.php b/www/inc/order_listing.php new file mode 100644 index 0000000..16854dd --- /dev/null +++ b/www/inc/order_listing.php @@ -0,0 +1,42 @@ + +// +---------------------------------------------------------------------- +// | +// | Copyright: See COPYING file that comes with this distribution +// +---------------------------------------------------------------------- +// + +/** creates the login to an order */ +function createOrderLogin() +{ + global $parser; + + $error = ErrorManager::singleton(); + + $localParser = new Parser("orderlogin.html"); + + $localParser->setVar("fieldEMAIL", "ms_email"); + $localParser->setVar("radioIS_CUSTOMER", "ms_isCustomer"); + $localParser->setVar("fieldPASSWORD", "ms_password"); + $localParser->setVar("buttonCONTINUE", "ms_loginContinue"); + + if (!empty($_POST["ms_email"])) { + $localParser->setVar("valueEMAIL", $_POST["ms_email"]); + } else { + $localParser->setVar("valueEMAIL", ""); + } + + // set error message + if ($error->exists()) { + $localParser->setVar("IS_ERROR", "true"); + $localParser->setVar("ERRORAREA", $error->getAllFormatted()); + } + + // create page + $parser->setVAR("PAGE", $localParser->parseFile("orderlogin.html")); +} + +?> \ No newline at end of file diff --git a/www/inc/submit.php b/www/inc/submit.php index ed3af6e..3471d9c 100644 --- a/www/inc/submit.php +++ b/www/inc/submit.php @@ -9,15 +9,20 @@ // +---------------------------------------------------------------------- // +// forward to order login when order button in cart is pressed +if (isset($_POST["ms_goToOrder"])) { + Header("Location: index.php?mode=orderLogin"); + exit(); +} + /** adds an event to the cart */ function addEventToCart() { $error = ErrorManager::singleton(); - $lang = LanguageManager::singleton(); - $COOKIE_NAME = "ms_cartid"; if (isset($_POST["ms_save"])) { - $event = new Event($_GET["event"]); + $event = new Event(($_GET["event"]+0)); + $availableTickets = $event->availableTicketAmount(); if (empty($_POST["ms_amount"])) { $error->add(i18n("Please insert the number of tickets!")); return; @@ -27,17 +32,158 @@ function addEventToCart() } elseif (!$event->exists()) { $error->add(i18n("The event does not exist!")); return; + } else if ($availableTickets == 0) { + $error->add(i18n("No more tickets for this event available!")); + return; } else { - $cart = new Cart($_COOKIE[$COOKIE_NAME]); + $cart = new Cart(addslashes($_COOKIE[COOKIE_NAME])); if (!$cart->isValid()) { $cart = new Cart(); - setcookie($COOKIE_NAME, $cart->getCartId(), 0); + setcookie(COOKIE_NAME, $cart->getCartId(), 0); } - $cart->addTickets($event->getEventId(), $_POST["ms_amount"]); + // check if event is already booked + $cartTicket = $cart->getTicketsByEvent($event->getEventId()); + // if event is not booked + if ($cartTicket == false) { + // check if enough tickets available + if ($availableTickets < ($_POST["ms_amount"]+0)) { + $error->add(string_format(i18n("Only {1} tickets left!"), array("$availableTickets"))); + return; + } + + // add tickets to cart + $cart->addTickets(($event->getEventId()+0), ($_POST["ms_amount"]+0)); + } else { + // check if enough tickets available + if ($availableTickets < ($_POST["ms_amount"] + $cartTicket->getAmount())) { + $ticketsLeft = $availableTickets - $cartTicket->getAmount(); + if ($ticketsLeft > 0) + $error->add(string_format(i18n("Only {1} more tickets left!"),array("$ticketsLeft"))); + else + $error->add(i18n("No more tickets for this event available!")); + return; + } + + // set tickets to cartTicket + $cartTicket->changeAmount($cartTicket->getAmount() + $_POST["ms_amount"]); + } + Header("Location: index.php?mode=cart"); + exit(); } } } -?> + +/** deletes an event from the cart */ +function deleteEventFromCart() +{ + if ($_GET["action"]=="deleteEvent") { + $cart = new Cart(addslashes($_COOKIE[COOKIE_NAME])); + // check if cart valid + if ($cart->isValid()) { + // get cart ticket + $cartTicket = $cart->getTicketsByEvent($_GET["event"]+0); + if ($cartTicket != false) { + $cartTicket->changeAmount(0); + } + } + } +} + +/** modifies the amount of tickets in the cart */ +function changeTicketAmountInCart() +{ + $error = ErrorManager::singleton(); + + if (isset($_POST["ms_save"])) { + + $cart = new Cart(addslashes($_COOKIE[COOKIE_NAME])); + // check if cart valid + if ($cart->isValid()) { + + // get event IDs and amounts + $eventIDs = $_POST["ms_event"]; + $ticketAmounts = $_POST["ms_amount"]; + + $num = count($eventIDs); + + // check for errors in input + for ($i=0; $i < $num; $i++) { + $line = $i + 1; + if (empty($ticketAmounts[$i]) || !is_numeric($ticketAmounts[$i])) { + $error->add(string_format(i18n("Please enter an amount in line {1}!"), array("$line"))); + } + } + + if ($error->exists()) + return; + + // iterate over events + for ($i=0; $i < $num; $i++) { + // get eventID and belonging amount + $eventID = $eventIDs[$i]+0; + $amount = $ticketAmounts[$i]+0; + + $cartTicket = $cart->getTicketsByEvent($eventID); + + // check if amount changed + if ($cartTicket->getAmount() != $amount) { + // check if enough tickets available + $event = $cartTicket->eventObject(); + if ($event->availableTicketAmount() >= $amount) { + $cartTicket->changeAmount($amount); + } else { + $title = $event->getTitle(); + $availableTickets = $event->availableTicketAmount(); + $error->add(string_format(i18n("Event {1} has only {2} tickets left."), array("\"$title\"", "$availableTickets"))); + } + } + } + } + } +} + +/** checks order login for valid values */ +function checkOrderLogin() +{ + $error = ErrorManager::singleton(); + + if (isset($_POST["ms_loginContinue"])) { + // if user isn't registered + if ($_POST["ms_isCustomer"] == "false") { + if (!isEmail($_POST["ms_email"])) { + $error->add(i18n("Please enter a correct email address!")); + return; + } + + // if user is registered + } elseif ($_POST["ms_isCustomer"] == "true") { + if (!isEmail($_POST["ms_email"])) { + $error->add(i18n("Please enter a correct email address!")); + } + if (empty($_POST["ms_password"])) { + $error->add(i18n("Please enter a password!")); + } + if ($error->exists()) + return; + // TODO: check if login valid + + // if radio button is not checked + } else { + $error->add(i18n("Please specify if you're a registered user!")); + return; + } + + Header("Location: index.php?mode=userdata"); + exit(); + } +} + +/** checks if given value is a valid email address */ +function isEmail($value) { + return ereg("^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+$", $value); +} + +?> \ No newline at end of file diff --git a/www/index.php b/www/index.php index 598c606..ca64de2 100644 --- a/www/index.php +++ b/www/index.php @@ -2,6 +2,7 @@ //basics include('inc/loader.php'); include('inc/loader_nonadmin.php'); +include('inc/global_variables.php'); //include process script include('inc/submit.php'); @@ -9,6 +10,7 @@ include('inc/submit.php'); //include display scripts include('inc/event_listing.php'); include('inc/cart_listing.php'); +include('inc/order_listing.php'); //set common basics $mode="index"; @@ -16,9 +18,7 @@ if(isset($_GET["mode"])){ $mode=$_GET["mode"]; } -$lang = LanguageManager::singleton(); -$error = ErrorManager::singleton(); -$parser = new Parser(); +$lang->setLanguage("de"); //get page template and process it switch($mode){ @@ -27,8 +27,14 @@ switch($mode){ createEventDetails(); break; case "cart": + deleteEventFromCart(); + changeTicketAmountInCart(); createCartOverview(); break; + case "orderLogin": + checkOrderLogin(); + createOrderLogin(); + break; default: createEventList(); break; diff --git a/www/template/de/cart.html b/www/template/de/cart.html index 969b5c1..1ebce7a 100644 --- a/www/template/de/cart.html +++ b/www/template/de/cart.html @@ -1,7 +1,7 @@

Warenkorb

-
+ @@ -12,17 +12,13 @@ + @TABLEROWS@ - - - - -
 Anzahl Summe
Summe:@TOTALSUM@ €
#set:ROW: -Löschen -@EVENTNAME@ +Löschen +@EVENTNAME@ @DATE@ @TIME@ @PRICE@ € @@ -31,13 +27,26 @@ #endset +#set:EMPTYROWS: +Sie haben keine Veranstaltungen im Warenkorb. +#endset + + +Summe: +@TOTALSUM@ € + + +
+#if:IS_HIDDEN==true +@HIDDENAREA@ +#endif
-#if:ERROR==true +#if:IS_ERROR==true @ERRORAREA@ #endif diff --git a/www/template/de/lang.po b/www/template/de/lang.po index 686dfce..a62bdfe 100644 --- a/www/template/de/lang.po +++ b/www/template/de/lang.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-04 17:12+0100\n" +"POT-Creation-Date: 2007-11-17 23:42+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,30 +16,62 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../inc/submit.php:22 +#: ../../inc/submit.php:26 msgid "Please insert the number of tickets!" msgstr "Bitte angeben wieviele Tickets gewünscht werden!" -#: ../../inc/submit.php:25 +#: ../../inc/submit.php:29 msgid "Please insert a number!" msgstr "Bitte Zahlen verwenden!" -#: ../../inc/submit.php:28 +#: ../../inc/submit.php:32 msgid "The event does not exist!" msgstr "Diese Veranstaltung existiert nicht." -#: inc/language_manager.php:60 +#: ../../inc/submit.php:35 ../../inc/submit.php:64 +msgid "No more tickets for this event available!" +msgstr "Für diese Veranstaltung gibt es keine Tickets mehr!" + +#: ../../inc/submit.php:51 +msgid "Only {1} tickets left!" +msgstr "Nur noch {1} Tickets übrig!" + +#: ../../inc/submit.php:62 +msgid "Only {1} more tickets left!" +msgstr "Nur noch {1} Tickets übrig!" + +#: ../../inc/submit.php:115 +msgid "Please enter an amount in line {1}!" +msgstr "Bitte geben Sie eine Menge in Zeile {1} ein." + +#: ../../inc/submit.php:139 +msgid "Event {1} has only {2} tickets left." +msgstr "Für die Veranstaltung {1} sind nur noch {2} Tickets übrig." + +#: ../../inc/submit.php:156 ../../inc/submit.php:163 +msgid "Please enter a correct email address!" +msgstr "Bitte geben Sie eine korrekte E-Mail-Adresse ein!" + +#: ../../inc/submit.php:166 +msgid "Please enter a password!" +msgstr "Bitte geben Sie ein Passwort ein!" + +#: ../../inc/submit.php:174 +msgid "Please specify if you're a registered user!" +msgstr "Bitte geben Sie an, ob Sie ein registrierter Nutzer sind!" + +#: ../../inc/language_manager.php:108 msgid "Y-m-d" msgstr "d.m.Y" -#: inc/language_manager.php:66 +#: ../../inc/language_manager.php:114 msgid "h:i a" msgstr "H:i" -#: inc/language_manager.php:72 +#: ../../inc/language_manager.php:120 msgid "." msgstr "," -#: inc/language_manager.php:72 +#: ../../inc/language_manager.php:120 msgid "," msgstr "." diff --git a/www/template/de/orderlogin.html b/www/template/de/orderlogin.html new file mode 100644 index 0000000..9074a92 --- /dev/null +++ b/www/template/de/orderlogin.html @@ -0,0 +1,20 @@ +

Bestellung - Anmeldung

+
+
+

Bitte geben Sie Ihre E-Mail-Adresse ein:

+

+Ich bin ein neuer Kunde. +

+

+Ich bin bereits Kunde. Mein Passwort: +

+
+ +
+
+ +#if:IS_ERROR==true +@ERRORAREA@ +#endif + +
\ No newline at end of file diff --git a/www/template/de/userlogin.html b/www/template/de/userlogin.html new file mode 100644 index 0000000..bf312f7 --- /dev/null +++ b/www/template/de/userlogin.html @@ -0,0 +1,18 @@ +

Login

+
+
+
+
+ + +
+
+ + +
+
+
+ +
+
+
\ No newline at end of file -- 1.7.2.5