From 8eec645c4068dfa3783ce7a656cc75bcbf48b4ba Mon Sep 17 00:00:00 2001 From: Jeroen ten kate Date: Thu, 27 Dec 2012 20:51:16 +0100 Subject: [PATCH 1/3] Initial commit of modified Basket module Additions: order status, customer object, e-mails for order status changes, additional order view, webshop configuration options --- .../controllers/admin_configure.php | 163 ++++ .../controllers/admin_postage_bands.php | 147 ++++ .../controllers/admin_product_lines.php | 149 ++++ .../basket_plus/controllers/basket.php | 598 +++++++++++++ 3.0/modules/basket_plus/css/basket.css | 157 ++++ 3.0/modules/basket_plus/helpers/basket.php | 785 ++++++++++++++++++ .../basket_plus/helpers/basket_block.php | 21 + .../basket_plus/helpers/basket_event.php | 127 +++ .../basket_plus/helpers/basket_installer.php | 299 +++++++ .../basket_plus/helpers/basket_theme.php | 56 ++ 3.0/modules/basket_plus/helpers/order_log.php | 46 + .../basket_plus/helpers/postage_band.php | 97 +++ 3.0/modules/basket_plus/helpers/product.php | 189 +++++ 3.0/modules/basket_plus/images/basket.png | Bin 0 -> 424 bytes 3.0/modules/basket_plus/libraries/Paypal.php | 330 ++++++++ .../basket_plus/libraries/Session_Basket.php | 216 +++++ 3.0/modules/basket_plus/models/customer.php | 22 + .../basket_plus/models/ipn_message.php | 16 + .../basket_plus/models/item_product.php | 22 + 3.0/modules/basket_plus/models/order.php | 87 ++ 3.0/modules/basket_plus/models/order_log.php | 84 ++ .../basket_plus/models/order_update.php | 25 + .../basket_plus/models/postage_band.php | 26 + 3.0/modules/basket_plus/models/product.php | 26 + .../basket_plus/models/product_override.php | 22 + 3.0/modules/basket_plus/module.info | 3 + .../basket_plus/views/add_to_basket.html.php | 5 + .../views/add_to_basket_ajax.html.php | 11 + .../views/admin_configure.html.php | 7 + .../views/admin_postage_bands.html.php | 71 ++ .../views/admin_product_lines.html.php | 60 ++ .../views/admin_templates.html.php | 8 + .../views/basket-side-bar.html.php | 62 ++ 3.0/modules/basket_plus/views/basket.html.php | 35 + .../basket_plus/views/checkout.html.php | 167 ++++ .../basket_plus/views/confirm_order.html.php | 152 ++++ .../basket_plus/views/order_complete.html.php | 27 + .../views/paypal_redirect.html.php | 4 + 3.0/modules/basket_plus/views/pew1.html.php | 16 + 3.0/modules/basket_plus/views/pew2.html.php | 17 + .../basket_plus/views/print_order.html.php | 20 + .../basket_plus/views/view_basket.html.php | 145 ++++ .../basket_plus/views/view_ipn.html.php | 46 + .../basket_plus/views/view_order.html.php | 36 + .../views/view_order_logs.html.php | 42 + .../basket_plus/views/view_orders.html.php | 128 +++ 46 files changed, 4772 insertions(+) create mode 100644 3.0/modules/basket_plus/controllers/admin_configure.php create mode 100644 3.0/modules/basket_plus/controllers/admin_postage_bands.php create mode 100644 3.0/modules/basket_plus/controllers/admin_product_lines.php create mode 100644 3.0/modules/basket_plus/controllers/basket.php create mode 100644 3.0/modules/basket_plus/css/basket.css create mode 100644 3.0/modules/basket_plus/helpers/basket.php create mode 100644 3.0/modules/basket_plus/helpers/basket_block.php create mode 100644 3.0/modules/basket_plus/helpers/basket_event.php create mode 100644 3.0/modules/basket_plus/helpers/basket_installer.php create mode 100644 3.0/modules/basket_plus/helpers/basket_theme.php create mode 100644 3.0/modules/basket_plus/helpers/order_log.php create mode 100644 3.0/modules/basket_plus/helpers/postage_band.php create mode 100644 3.0/modules/basket_plus/helpers/product.php create mode 100644 3.0/modules/basket_plus/images/basket.png create mode 100644 3.0/modules/basket_plus/libraries/Paypal.php create mode 100644 3.0/modules/basket_plus/libraries/Session_Basket.php create mode 100644 3.0/modules/basket_plus/models/customer.php create mode 100644 3.0/modules/basket_plus/models/ipn_message.php create mode 100644 3.0/modules/basket_plus/models/item_product.php create mode 100644 3.0/modules/basket_plus/models/order.php create mode 100644 3.0/modules/basket_plus/models/order_log.php create mode 100644 3.0/modules/basket_plus/models/order_update.php create mode 100644 3.0/modules/basket_plus/models/postage_band.php create mode 100644 3.0/modules/basket_plus/models/product.php create mode 100644 3.0/modules/basket_plus/models/product_override.php create mode 100644 3.0/modules/basket_plus/module.info create mode 100644 3.0/modules/basket_plus/views/add_to_basket.html.php create mode 100644 3.0/modules/basket_plus/views/add_to_basket_ajax.html.php create mode 100644 3.0/modules/basket_plus/views/admin_configure.html.php create mode 100644 3.0/modules/basket_plus/views/admin_postage_bands.html.php create mode 100644 3.0/modules/basket_plus/views/admin_product_lines.html.php create mode 100644 3.0/modules/basket_plus/views/admin_templates.html.php create mode 100644 3.0/modules/basket_plus/views/basket-side-bar.html.php create mode 100644 3.0/modules/basket_plus/views/basket.html.php create mode 100644 3.0/modules/basket_plus/views/checkout.html.php create mode 100644 3.0/modules/basket_plus/views/confirm_order.html.php create mode 100644 3.0/modules/basket_plus/views/order_complete.html.php create mode 100644 3.0/modules/basket_plus/views/paypal_redirect.html.php create mode 100644 3.0/modules/basket_plus/views/pew1.html.php create mode 100644 3.0/modules/basket_plus/views/pew2.html.php create mode 100644 3.0/modules/basket_plus/views/print_order.html.php create mode 100644 3.0/modules/basket_plus/views/view_basket.html.php create mode 100644 3.0/modules/basket_plus/views/view_ipn.html.php create mode 100644 3.0/modules/basket_plus/views/view_order.html.php create mode 100644 3.0/modules/basket_plus/views/view_order_logs.html.php create mode 100644 3.0/modules/basket_plus/views/view_orders.html.php diff --git a/3.0/modules/basket_plus/controllers/admin_configure.php b/3.0/modules/basket_plus/controllers/admin_configure.php new file mode 100644 index 00000000..66f69a2d --- /dev/null +++ b/3.0/modules/basket_plus/controllers/admin_configure.php @@ -0,0 +1,163 @@ +validate()) { + + basket::extractForm($form); + message::success(t("Basket Module Configured!")); + } + } + else + { + basket::populateForm($form); + } + + $view = new Admin_View("admin.html"); + $view->content = new View("admin_configure.html"); + + $view->content->form = $form; + + print $view; + } + + /** + * the index page of the user homes admin + */ + public function templates() + { + $form = basket::get_template_form(); + if (request::method() == "post") { + access::verify_csrf(); + + if ($form->validate()) { + + basket::extractTemplateForm($form); + message::success(t("Basket Module Configured!")); + } + } + else + { + basket::populateTemplateForm($form); + } + + $view = new Admin_View("admin.html"); + $view->content = new View("admin_templates.html"); + + $view->content->form = $form; + + print $view; + } + + public function paypal_encrypt_wizard_step1() + { + $view = new Admin_View("admin.html"); + $view->content = new View("pew1.html"); + + $view->content->form = self::keyGenerationForm(); + + print $view; + + } + + public function paypal_encrypt_wizard_step2() + { + access::verify_csrf(); + + $form = self::keyGenerationForm(); + + if (!$form->validate()) { + + self::paypal_encrypt_wizard_step1(); + return; + } + + $ssldir = str_replace('\\','/',VARPATH.'certificate'); + $ssldir= rtrim($ssldir, '/').'/'; + + if ( ! is_dir($ssldir)) + { + // Create the upload directory + mkdir($ssldir, 0777, TRUE); + } + + $prkeyfile = $ssldir . "myprvkey.pem"; + $pubcertfile = $ssldir . "mypubcert.pem"; + $certreqfile = $ssldir . "mycertreq.pem"; + + $dn = array("countryName" => $form->encrypt->countryName->value, + "stateOrProvinceName" => $form->encrypt->stateOrProvinceName->value, + "localityName" => $form->encrypt->localityName->value, + "organizationName" => $form->encrypt->organizationName->value, + "organizationalUnitName" => $form->encrypt->organizationalUnitName->value, + "commonName" => $form->encrypt->commonName->value, + "emailAddress" => $form->encrypt->emailAddress->value); + $privkeypass = $form->encrypt->privKeyPass->value; + $numberofdays = 365; + $config = array( + "private_key_bits" => 1024 + ); + + $privkey = openssl_pkey_new($config); + $csr = openssl_csr_new($dn, $privkey); + $sscert = openssl_csr_sign($csr, null, $privkey, $numberofdays); + openssl_x509_export($sscert, $publickey); + openssl_pkey_export($privkey, $privatekey, $privkeypass); + openssl_csr_export($csr, $csrStr); + + openssl_x509_export_to_file($sscert, $pubcertfile); + openssl_pkey_export_to_file ($privkey, $prkeyfile, $privkeypass); + openssl_csr_export_to_file($csr, $certreqfile); + + //echo "Your Public Certificate has been saved to " . $pubcertfile . "

"; + //echo "Your Private Key has been saved to " . $prkeyfile . "

"; + //echo "Your Certificate Request has been saved to " . $certreqfile . "

"; + + //echo $privatekey; // Will hold the exported PriKey + //echo $publickey; // Will hold the exported PubKey + //echo $csrStr; // Will hold the exported Certificate + } + + private function keyGenerationForm() + { + $form = new Forge("admin/configure/paypal_encrypt_wizard_step2", "", "post", array("id" => "generateKeys", "name" =>"generateKeys")); + $group = $form->group("encrypt")->label(t("Key Generation Details")); + $group->input("countryName")->label(t("Country Name"))->id("countryName"); + $group->input("stateOrProvinceName")->label(t("State or Province Name"))->id("stateOrProvinceName"); + $group->input("localityName")->label(t("Locality Name"))->id("localityName"); + $group->input("organizationName")->label(t("Organization Name"))->id("organizationName"); + $group->input("organizationalUnitName")->label(t("Organizational Unit Name"))->id("organizationalUnitName"); + $group->input("commonName")->label(t("Common Name"))->id("commonName"); + $group->input("emailAddress")->label(t("E-Mail Address"))->id("emailAddress"); + $group->input("privKeyPass")->label(t("Private Key Pass"))->id("privkeypass"); + return $form; + } + +} diff --git a/3.0/modules/basket_plus/controllers/admin_postage_bands.php b/3.0/modules/basket_plus/controllers/admin_postage_bands.php new file mode 100644 index 00000000..4f172c3d --- /dev/null +++ b/3.0/modules/basket_plus/controllers/admin_postage_bands.php @@ -0,0 +1,147 @@ +content = new View("admin_postage_bands.html"); + $view->content->postage_bands = ORM::factory("postage_band")->order_by("name")->find_all(); + + print $view; + } + + public function add_postage_band_form() { + print postage_band::get_add_form_admin(); + } + + + public function add_postage_band() { + access::verify_csrf(); + + $form = postage_band::get_add_form_admin(); + $valid = $form->validate(); + $name = $form->add_postage->inputs["name"]->value; + $postage = ORM::factory("postage_band")->where("name","=", $name)->find(); + if ($postage->loaded()) { + $form->add_postage->inputs["name"]->add_error("in_use", 1); + $valid = false; + } + + if ($valid) { + $postage = postage_band::create( + $name, + $form->add_postage->flat_rate->value, + $form->add_postage->per_item->value + ); + + $postage->save(); + message::success(t("Created postage band %postage_name", array( + "postage_name" => html::clean($postage->name)))); + print json::reply(array("result" => "success")); + } else { + print $form; + } + } + + public function delete_postage_band_form($id) { + $postage = ORM::factory("postage_band", $id); + if (!$postage->loaded()) { + kohana::show_404(); + } + print postage_band::get_delete_form_admin($postage); + } + + public function delete_postage_band($id) { + access::verify_csrf(); + + $postage = ORM::factory("postage_band", $id); + if (!$postage->loaded()) { + kohana::show_404(); + } + + $form = postage_band::get_delete_form_admin($postage); + if($form->validate()) { + $name = $postage->name; + $postage->delete(); + } else { + print $form; + } + + $message = t("Deleted user %postage_band", array("postage_band" => html::clean($name))); + log::success("user", $message); + message::success($message); + print json::reply(array("result" => "success")); + } + + public function edit_postage_band($id) { + access::verify_csrf(); + + $postage = ORM::factory("postage_band", $id); + if (!$postage->loaded()) { + kohana::show_404(); + } + + $form = postage_band::get_edit_form_admin($postage); + $valid = $form->validate(); + if ($valid) { + $new_name = $form->edit_postage->inputs["name"]->value; + if ($new_name != $postage->name && + ORM::factory("postage_band") + ->where("name", "=", $new_name) + ->where("id","!=", $postage->id) + ->find() + ->loaded()) { + $form->edit_postage->inputs["name"]->add_error("in_use", 1); + $valid = false; + } else { + $postage->name = $new_name; + } + } + + if ($valid) { + $postage->flat_rate = $form->edit_postage->flat_rate->value; + $postage->per_item = $form->edit_postage->per_item->value; + $postage->save(); + + message::success(t("Changed postage band %postage_name", + array("postage_name" => html::clean($postage->name)))); + print json::reply(array("result" => "success")); + } else { + print $form; + } + } + + public function edit_postage_band_form($id) { + $postage = ORM::factory("postage_band", $id); + if (!$postage->loaded()) { + kohana::show_404(); + } + + $form = postage_band::get_edit_form_admin($postage); + + print $form; + } + +} \ No newline at end of file diff --git a/3.0/modules/basket_plus/controllers/admin_product_lines.php b/3.0/modules/basket_plus/controllers/admin_product_lines.php new file mode 100644 index 00000000..dc45d704 --- /dev/null +++ b/3.0/modules/basket_plus/controllers/admin_product_lines.php @@ -0,0 +1,149 @@ +content = new View("admin_product_lines.html"); + $view->content->products = ORM::factory("product")->order_by("name")->find_all(); + + print $view; + } + + public function add_product_form() { + print product::get_add_form_admin(); + } + + + public function add_product() { + access::verify_csrf(); + + $form = product::get_add_form_admin(); + $valid = $form->validate(); + $name = $form->add_product->inputs["name"]->value; + $product = ORM::factory("product")->where("name", "=", $name)->find(); + if ($product->loaded()) { + $form->add_product->inputs["name"]->add_error("in_use", 1); + $valid = false; + } + + if ($valid) { + $product = product::create( + $name, + $form->add_product->cost->value, + $form->add_product->description->value, + $form->add_product->postage_band->value + ); + + $product->save(); + message::success(t("Created product %product_name", array( + "product_name" => html::clean($product->name)))); + print json::reply(array("result" => "success")); + } else { + print $form; + } + } + + public function delete_product_form($id) { + $product = ORM::factory("product", $id); + if (!$product->loaded()) { + kohana::show_404(); + } + print product::get_delete_form_admin($product); + } + + public function delete_product($id) { + access::verify_csrf(); + + $product = ORM::factory("product", $id); + if (!$product->loaded()) { + kohana::show_404(); + } + + $form = product::get_delete_form_admin($product); + if($form->validate()) { + $name = $product->name; + $product->delete(); + } else { + print $form; + } + + $message = t("Deleted user %product_name", array("product_name" => html::clean($name))); + log::success("user", $message); + message::success($message); + print json::reply(array("result" => "success")); + } + + public function edit_product($id) { + access::verify_csrf(); + + $product = ORM::factory("product", $id); + if (!$product->loaded()) { + kohana::show_404(); + } + + $form = product::get_edit_form_admin($product); + $valid = $form->validate(); + if ($valid) { + $new_name = $form->edit_product->inputs["name"]->value; + if ($new_name != $product->name && + ORM::factory("product") + ->where("name", "=", $new_name) + ->where("id","!=", $product->id) + ->find() + ->loaded()) { + $form->edit_product->inputs["name"]->add_error("in_use", 1); + $valid = false; + } else { + $product->name = $new_name; + } + } + + if ($valid) { + $product->cost = $form->edit_product->cost->value; + $product->description = $form->edit_product->description->value; + $product->postage_band_id = $form->edit_product->postage_band->value; + $product->save(); + + message::success(t("Changed product %product_name", + array("product_name" => html::clean($product->name)))); + print json::reply(array("result" => "success")); + } else { + print $form; + } + } + + public function edit_product_form($id) { + $product = ORM::factory("product", $id); + if (!$product->loaded()) { + kohana::show_404(); + } + + $form = product::get_edit_form_admin($product); + + print $form; + } + +} \ No newline at end of file diff --git a/3.0/modules/basket_plus/controllers/basket.php b/3.0/modules/basket_plus/controllers/basket.php new file mode 100644 index 00000000..004827ee --- /dev/null +++ b/3.0/modules/basket_plus/controllers/basket.php @@ -0,0 +1,598 @@ +disablepp(); + } + elseif ($pp=="ppon"){ + $basket->enablepp(); + } + } + + $view = new View("view_basket.html"); + $view->basket = $basket; + + $template->content = $view; + + print $template; + } + + public function preview($id) { + $item = ORM::factory("item", $id); + + print ""; + } + + public function view_orders() { + //get all incomplete orders and show them in a view + self::check_view_orders(); + $template = new Theme_View("page.html", "basket"); + + $incomplete_orders = ORM::factory("order")->where('status',"<",20)->find_all(); + + $view = new View("view_orders.html"); + + $view->orders = $incomplete_orders; + + $template->content = $view; + + print $template; + } + + public function view_all_orders() { + //get all orders and show them in a view + self::check_view_orders(); + $template = new Theme_View("page.html", "basket"); + + $all_orders = ORM::factory("order")->find_all(); + + $view = new View("view_orders.html"); + + $view->orders = $all_orders; + + $template->content = $view; + + print $template; + } + + public function view_ipn($orderid){ + self::check_view_orders(); + + $template = new Theme_View("page.html", "basket"); + + $order = ORM::factory("order")->where("id","=",$orderid)->find(); + $ipn_messages = ORM::factory("ipn_message")->where("key","=",$orderid)->find_all(); + //$ipn_messages = ORM::factory("ipn_message")->find_all(); + + $view = new View("view_ipn.html"); + + $view->order = $order; + $view->ipn_messages = $ipn_messages; + + $template->content = $view; + + print $template; + } + + public function check_view_orders() { + if (!basket::can_view_orders()){ + die("Invalid access."); + } + } + + public function print_order($id){ + + access::verify_csrf(); + self::check_view_orders(); + + $prefix = basket::getOrderPrefix(); + $length = strlen($prefix); + if (strlen($id)>$length ){ + if ($prefix === strtolower(substr($id,0,$length ))){ + $id = substr($id,$length); + } + } + $order = ORM::factory("order", $id); + $view = new View("print_order.html"); + + if ($order->loaded()){ + $view->order = str_replace(array("\r\n", "\n", "\r"),"
",$order->text); + }else{ + $view->order = "Order ".$id." not found."; + } + print $view; + } + + public function show_order($id){ + + access::verify_csrf(); + self::check_view_orders(); + + $prefix = basket::getOrderPrefix(); + $length = strlen($prefix); + if (strlen($id)>$length ){ + if ($prefix === strtolower(substr($id,0,$length ))){ + $id = substr($id,$length); + } + } + + $order = ORM::factory("order", $id); + + if ($order->loaded()){ + $view = new View("view_order.html"); + $view->order = $order; + print $view; + }else{ + print "Order ".$id." not found."; + } + } + + public function show_order_logs($id){ + //get all order logs of order $id and show them in a simple view + self::check_view_orders(); + + $order_log = ORM::factory("order_log")->where('id',"=",$id)->find_all(); + + $view = new View("view_order_logs.html"); + + $view->order_logs = $order_log; + print $view; + + print $template; + } + + public function show_ipn($id){ + access::verify_csrf(); + self::check_view_orders(); + $ipn_message = ORM::factory("ipn_message", $id); + + if ($ipn_message->loaded()){ + print $ipn_message->text; + }else{ + print "IPN Message ".$id." not found."; + } + } + + public function send_order_copy($id){ + access::verify_csrf(); + self::check_view_orders(); + $order = ORM::factory("order", $id); + + if ($order->loaded()){ + //Send order copy + basket::send_invoice_copy($order); + order_log::log($order,order_log::COPY_SENT); + } + url::redirect("basket/view_orders"); + } + + public function confirm_order_payment($id){ + access::verify_csrf(); + self::check_view_orders(); + $order = ORM::factory("order", $id); + + if ($order->loaded()){ + if ($order->status == 1) + { + $order->status = 2; + order_log::log($order,order_log::PAID); + } + elseif ($order->status == 10) + { + $order->status = 20; + order_log::log($order,order_log::PAID); + } + $order->save(); + //Send payment confirmation + basket::send_payment_confirmation($order); + } + url::redirect("basket/view_orders"); + } + + public function remind_order_payment($id){ + access::verify_csrf(); + self::check_view_orders(); + $order = ORM::factory("order", $id); + + if ($order->loaded()){ + if ($order->status == 1) + { + //Send payment reminder + order_log::log($order,order_log::LATE_PAYMENT); + basket::send_payment_reminder($order); + } + } + url::redirect("basket/view_orders"); + } + + public function confirm_order_delivery($id){ + access::verify_csrf(); + self::check_view_orders(); + $order = ORM::factory("order", $id); + + if ($order->loaded()){ + if ($order->status == 2) + { + $order->status = 20; + order_log::log($order,order_log::DELIVERED); + } + if ($order->status == 1) + { + $order->status = 10; + order_log::log($order,order_log::DELIVERED_NOTPAID); + } + // Send delivery confirmation + basket::send_delivery_confirmation($order); + $order->save(); + } + url::redirect("basket/view_orders"); + } + + public function confirm_order_delivery_not_paid($id){ + access::verify_csrf(); + self::check_view_orders(); + $order = ORM::factory("order", $id); + + if ($order->loaded()){ + } + url::redirect("basket/view_orders"); + } + + public function confirm_order_cancelled($id){ + access::verify_csrf(); + self::check_view_orders(); + $order = ORM::factory("order", $id); + + if ($order->loaded()){ + $order->status = 99; + order_log::log($order,order_log::CANCELLED); + // Send cancellation confirmation + basket::send_cancellation_confirmation($order); + $order->save(); + } + url::redirect("basket/view_orders"); + } + + private function getCheckoutForm(){ + + $basket = Session_Basket::get(); + $ppon = $basket->ispp(); + $postage = $basket->postage_cost(); + + //labels for fields + $input1_lbl=t("Title"); + $input2_lbl=t("Initials/First name")."*"; + $input3_lbl=t("Insertion"); + $input4_lbl=t("Name")."*"; + $input5_lbl=t("Street"); + $input6_lbl=t("House Number / Name"); + $input7_lbl=t("Suburb"); + $input8_lbl=t("Postcode"); + $input9_lbl=t("Town or City"); + $input10_lbl=t("E-mail Address")."*"; + $input11_lbl=t("Telephone Number")."*"; + $input12_lbl=t("Child's Name"); + $input13_lbl=t("Child's Group"); + $input14_lbl=t("Additional comments"); + $input15_lbl=t("I agree with the General Terms")."*"; + //labels for mandatory fields with p&p + if (($ppon) && ($postage > 0)){ + $input5_lbl=$input5_lbl."*"; + $input6_lbl=$input6_lbl."*"; + $input8_lbl=$input8_lbl."*"; + $input9_lbl=$input9_lbl."*"; + } + //labels for mandatory fields with pickup + elseif ($postage > 0){ + $input12_lbl=$input12_lbl."*"; + $input13_lbl=$input13_lbl."*"; + } + $form = new Forge("basket/confirm", "", "post", array("id" => "checkout", "name" =>"checkout")); + $group = $form->group("contact")->label(t("Contact Details")); + $group->input("title")->label($input1_lbl)->id("title"); + $group->input("initials")->label($input2_lbl)->id("initials"); + $group->input("insertion")->label($input3_lbl)->id("insertion"); + $group->input("fullname")->label($input4_lbl)->id("fullname"); + $group->input("street")->label($input5_lbl)->id("street"); + $group->input("house")->label($input6_lbl)->id("house"); + $group->hidden("suburb")->label($input7_lbl)->id("suburb"); + $group->input("postcode")->label($input8_lbl)->id("postcode"); + $group->input("town")->label($input9_lbl)->id("town"); + $group->input("email")->label($input10_lbl)->id("email"); + $group->input("phone")->label($input11_lbl)->id("phone"); + //show child fields only with pickup DISABLED + if ((!$ppon) && ($postage > 1000)){ + $group->input("childname")->label($input12_lbl)->id("childname"); + $group->input("childgroup")->label($input13_lbl)->id("childgroup"); + } + else{ + $group->hidden("childname")->label($input12_lbl)->id("childname"); + $group->hidden("childgroup")->label($input13_lbl)->id("childgroup"); + } + $group->input("comments")->label($input14_lbl)->id("comments"); + $group->checkbox("agreeterms")->label($input15_lbl)->id("agreeterms"); + $group->hidden("paypal")->id("paypal"); + + return $form; + } + + public function checkout () { + + $template = new Theme_View("page.html", "basket"); + + $view = new View("checkout.html"); + + $basket = Session_Basket::get(); + + /* changed order for nl_NL */ + $form = self::getCheckoutForm(); + $form->contact->title->value($basket->title); + $form->contact->initials->value($basket->initials); + $form->contact->insertion->value($basket->insertion); + $form->contact->fullname->value($basket->name); + $form->contact->street->value($basket->street); + $form->contact->house->value($basket->house); + $form->contact->postcode->value($basket->postcode); + $form->contact->town->value($basket->town); + $form->contact->suburb->value($basket->suburb); + $form->contact->email->value($basket->email); + $form->contact->phone->value($basket->phone); + $form->contact->childname->value($basket->childname); + $form->contact->childgroup->value($basket->childgroup); + $form->contact->comments->value($basket->comments); + $form->contact->agreeterms->value($basket->agreeterms); + $view->form = $form; + + $template->content = $view; + + print $template; + } + + public function confirm () { + access::verify_csrf(); + + $form = $this->getCheckoutForm(); + + $valid = $form->validate(); + + if ($valid){ + $basket = Session_Basket::get(); + + if (!isset($basket->contents ) || count($basket->contents) == 0) { + self::view_basket(); + return; + } + + /* changed order for nl_NL */ + $basket->title = $form->contact->title->value; + $basket->initials = $form->contact->initials->value; + $basket->insertion = $form->contact->insertion->value; + $basket->name = $form->contact->fullname->value; + $basket->street = $form->contact->street->value; + $basket->house = $form->contact->house->value; + $basket->postcode = $form->contact->postcode->value; + $basket->town = $form->contact->town->value; + $basket->suburb = $form->contact->suburb->value; + $basket->email = $form->contact->email->value; + $basket->phone = $form->contact->phone->value; + $basket->childname = $form->contact->childname->value; + $basket->childgroup = $form->contact->childgroup->value; + $basket->comments = $form->contact->comments->value; + $basket->agreeterms=$form->contact->agreeterms->value; + + $paypal=$form->contact->paypal->value=="true"; + $template = new Theme_View("page.html", "basket"); + +// NOT USED =============================== + if ($paypal){ + // create a prelimary order + $order = basket::createOrder($basket, Order_Model::PAYMENT_PAYPAL); + $paypal = new Paypal(); + + // create the order first + $view = new View("paypal_redirect.html"); + $view ->form = $paypal->process($basket, + url::site("basket/paypal_complete/$order->id", "http"), + url::site("basket/paypal_cancel/$order->id", "http"), + url::site("basket/paypal_ipn/$order->id", "http")); + $template->content = $view; + print $template; + + // redirect to paypal +// NOT USED END =============================== + }else + { + $form = new Forge("basket/complete", "", "post", array("id" => "confirm", "name" =>"confirm")); + $view = new View("confirm_order.html"); + $view->basket = $basket; + $template->content = $view; + $view->form = $form; + print $template; + } + } + else + { + die("Invalid confirmation!"); + } + } + + function paypal_ipn($id){ + $order = ORM::factory("order")->where("id","=",$id)->find(); + if ($order->loaded()){ + + $paypal = new Paypal(); + + if ($paypal->validate_ipn($id)){ + if ($paypal->ipn_data['payment_status'] == "Completed"){ + + $order->status = Order_Model::PAYMENT_CONFIRMED; + + order_log::log($order,order_log::ORDERED); + // send e-mails + basket::send_order($order); + basket::send_invoice($order); + + $order->save(); + } + return; + } + print "invalid access. tut tut!"; + } + return; + } + + public function paypal_complete($id) { + $order = ORM::factory("order")->where("id","=",$id)->find(); + $basket = Session_Basket::get(); + $basket->clear(); + $this->_complete($order); + } + + public function paypal_cancel($id){ + $order = ORM::factory("order")->where("id","=",$id)->find(); + + if ($order->loaded()){ + $order->delete(); + } + + $this->checkout(); + } + + public function complete () { + access::verify_csrf(); + + $basket = Session_Basket::get(); + + if (!isset($basket->contents ) || count($basket->contents) == 0) { + self::view_basket(); + return; + } + + // create order + $order = basket::createOrder($basket, Order_Model::PAYMENT_OFFLINE); + $basket->clear(); + + order_log::log($order,order_log::ORDERED); + // send e-mails + basket::send_order($order); + basket::send_invoice($order); + + $this->_complete($order); + } + + private function _complete($order){ + $template = new Theme_View("page.html", "basket"); + $view = new View("order_complete.html"); + $ordernumber = basket::getOrderPrefix().$order->id; + $view->ordernumber = $ordernumber; + $view->order = $order; + $view->webshop = basket::getWebshop(); + $view->email = basket::getEmailAddress(); + + $template->content = $view; + + print $template; + } + + private function getAddToBasketForm($id){ + + $form = new Forge("basket/add_to_basket", "", "post", array("id" => "gAddToBasketForm")); + $group = $form->group("add_to_basket")->label(t("Add To Basket")); + $group->hidden("id"); + $group->dropdown("product") + ->label(t("Product")) + ->options(product::getProductArray($id)); + $group->input("quantity")->label(t("Quantity"))->id("gQuantity"); + $group->submit("")->value(t("Add")); + //$group->submit("proceedToCheckout")->value(t("Proceed To Checkout")); + + return $form; + } + + public function add_to_basket(){ + + access::verify_csrf(); + if (!isset($_POST['id'])) + { + die("no id"); + } + $form = self::getAddToBasketForm($_POST['id']); + $valid = $form->validate(); + + if ($valid){ + $basket = Session_Basket::getOrCreate(); + $basket->add( + $form->add_to_basket->id->value, + $form->add_to_basket->product->value, + $form->add_to_basket->quantity->value); + + $item = ORM::factory("item", $form->add_to_basket->id->value); + + Session::instance()->set("redirect_home", $item->parent_id); + + print json::reply(array("result" => "success")); + } + else + { + log_error("invalid form!"); + } + } + + public function add_to_basket_ajax($id) { + + $view = new View("add_to_basket_ajax.html"); + + // get the item to add + $item = ORM::factory("item", $id); + if (!$item->loaded()) + { + //TODO + die("Not loaded id"); + } + + // get the basket to add to + $form = self::getAddToBasketForm($id); + $form->add_to_basket->id->value($id); + $form->add_to_basket->quantity->value(1); + + $view->form = $form; + $view->item = $item; + + print $view; + } + + public function remove_item($key) { + + $basket = Session_Basket::getOrCreate(); + $basket->remove($key); + url::redirect("basket/view_basket"); + } + +} diff --git a/3.0/modules/basket_plus/css/basket.css b/3.0/modules/basket_plus/css/basket.css new file mode 100644 index 00000000..1c46d586 --- /dev/null +++ b/3.0/modules/basket_plus/css/basket.css @@ -0,0 +1,157 @@ +#basket { + float:right; +} +#add_to_basket {float:right} +#basketForm {max-width:200px;float:left;} +#basketThumb {float:left; padding:10px;} +#basketThumb img{max-width:100px;} +#payment {float:right; width:50%} +#checkout input, +#checkout select, +#checkout textarea { + display: block; + clear: both; + padding: .2em; + width: 100%; +} +#checkout input.checkbox, +input[type=checkbox]{ + width: 10%; + margin-top: 3px; +} + +#checkout input, +#sidebar-basket {max-height:400px; overflow-y:auto; overflow-x:hidden;} +/* Classes */ +.order-status-1 a{color:#AA0000 !important} +.order-status-1 tr{background-color:orange !important} +.order-status-2 a{color:#00AA00 !important} +.order-status-2 tr{background-color:green !important} + +/*.orders-view ,p{font-size: 10px}*/ +.basket-right h3{margin-left: 10px} +.basket-right p{margin-left: 10px} + +.basket-right +{ + font-family: Verdana, Geneva, sans-serif; + font-size: 1em; +} +.pretty-table +{ + padding: 0; + margin: 0; + border-collapse: collapse; + font-family: "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; + font-size: 0.9em; + color: #000; + background: #bcd0e4 url("widget-table-bg.jpg") top left repeat-x; +} + +.pretty-table caption +{ + caption-side: bottom; + font-size: 0.9em; + font-style: italic; + text-align: right; + padding: 0.5em 0; +} + +.pretty-table th, .pretty-table td +{ + border: 1px dotted #666; + padding: 0.5em; + text-align: left; +} +.pretty-table th[scope=col] +{ + color: #000; + background-color: #8fadcc; + text-transform: uppercase; + font-size: 0.9em; + border-bottom: 2px solid #333; + border-right: 2px solid #333; +} + +.pretty-table th+th[scope=col] +{ + color: #fff; + background-color: #7d98b3; + border-right: 1px dotted #666; +} + +.pretty-table th[scope=row] +{ + background-color: #b8cfe5; + border-right: 2px solid #333; +} + +.pretty-table tr.alt th, .pretty-table tr.alt td +{ + color: #2a4763; +} + +.pretty-table tr:hover th[scope=row], .pretty-table tr:hover td +{ + background-color: darkblue; + color: #fff; +} +.pretty-table2 +{ + padding: 0; + margin: 0; + border-collapse: collapse; + font-family: "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; + font-size: 0.9em; + color: #000; + background: #bcd0e4 url("widget-table-bg.jpg") top left repeat-x; +} + +.pretty-table2 caption +{ + caption-side: bottom; + font-size: 0.9em; + font-style: italic; + text-align: right; + padding: 0.5em 0; +} + +.pretty-table2 th +{ + border-bottom: 1px solid #666; + padding: 0.5em; + text-align: left; +} +.pretty-table2 td +{ + border-top: 1px dotted #666; + border-bottom: 1px dotted #666; + padding: 0.2em; + text-align: left; +} + +.pretty-table2 th+th[scope=col] +{ + color: #fff; + background-color: #7d98b3; + border-right: 1px dotted #666; +} + +.pretty-table2 th[scope=row] +{ + background-color: #b8cfe5; + border-right: 2px solid #333; +} + +.pretty-table2 tr.alt th, .pretty-table tr.alt td +{ + color: #2a4763; +} + +.pretty-table3 td +{ + border-top: none; + border-bottom: none; + padding: 0.5em; + text-align: left; +} diff --git a/3.0/modules/basket_plus/helpers/basket.php b/3.0/modules/basket_plus/helpers/basket.php new file mode 100644 index 00000000..e8abe6e7 --- /dev/null +++ b/3.0/modules/basket_plus/helpers/basket.php @@ -0,0 +1,785 @@ + "Australian Dollars", + "CAD" => "Canadian Dollars", + "EUR" => "Euros", + "GBP" => "Pounds Sterling", + "JPY" => "Yen", + "USD" => "U.S. Dollars", + "NZD" => "New Zealand Dollar", + "CHF" => "Swiss Franc", + "HKD" => "Hong Kong Dollar", + "SGD" => "Singapore Dollar", + "SEK" => "Swedish Krona", + "DKK" => "Danish Krone", + "PLN" => "Polish Zloty", + "NOK" => "Norwegian Krone", + "HUF" => "Hungarian Forint", + "CZK" => "Czech Koruna", + "ILS" => "Israeli Shekel", + "MXN" => "Mexican Peso"); + + static $format= array( + "AUD" => "$", + "CAD" => "$", + "EUR" => "€", + "GBP" => "£", + "JPY" => "¥", + "USD" => "$", + "NZD" => "$", + "CHF" => "", + "HKD" => "$", + "SGD" => "$", + "SEK" => "", + "DKK" => "", + "PLN" => "", + "NOK" => "", + "HUF" => "", + "CZK" => "", + "ILS" => "", + "MXN" => "", + "none" => ""); + + static $formatweb= array( + "AUD" => "$", + "CAD" => "$", + "EUR" => "€", + "GBP" => "£", + "JPY" => "¥", + "USD" => "$", + "NZD" => "$", + "CHF" => "", + "HKD" => "$", + "SGD" => "$", + "SEK" => "", + "DKK" => "", + "PLN" => "", + "NOK" => "", + "HUF" => "", + "CZK" => "", + "ILS" => "", + "MXN" => ""); + + static public function can_view_orders() + { + if (identity::active_user()->admin){ + return true; + } + + print identity::active_user(); + foreach (identity::active_user()->groups() as $group){ + if ($group->name == 'shop'){ + return true; + } + } + + return false; + } + + static function get_configure_form() { + $form = new Forge("admin/configure", "", "post", array("id" => "g-configure-form")); + $group = $form->group("configure")->label(t("Configure Basket")); + $group->input("webshop")->label(t("Webshop"))->id("g-webshop"); + $group->input("website")->label(t("Website"))->id("g-order-website"); + $group->input("email")->label(t("Offline Paying Email Address"))->id("g-order-email-address"); + $group->dropdown("currency") + ->label(t("Currency")) + ->options(self::$currencies); + + $group->checkbox("side_bar")->label(t("Use only side bar"))->id("g-side-bar-only"); + + $group->checkbox("paypal")->label(t("Use Paypal"))->id("g-paypal"); + $group->input("paypal_account")->label(t("Paypal E-Mail Address"))->id("g-paypal-address"); + $group->checkbox("allow_pickup")->label(t("Allow Product Pickup"))->id("g-allow-pickup"); + $group->input("pickup_location")->label(t("Pickup Location"))->id("g-pickup-location"); + $group->input("order_prefix")->label(t("Order Number Prefix"))->id("g-order-prefix"); + $group->input("order_bankaccount")->label(t("Order Bank Account"))->id("g-order_bankaccount"); + $group->input("order_accountowner")->label(t("Order Account Owner"))->id("g-order_accountowner"); + $group->submit("")->value(t("Save")); + return $form; + } + + static function get_template_form() { + $form = new Forge("admin/configure/templates", "", "post", array("id" => "g-configure-form")); + $group = $form->group("configure")->label(t("Configure Basket")); + $group->textarea("payment_details")->label(t("Payment Details Description"))->id("g-payment-details"); + $group->textarea("order_complete_page")->label(t("Order Complete Page"))->id("g-order-complete_page"); + $group->input("order_complete_email_subject")->label(t("Order Complete Email Subject"))->id("g-order-complete_email_subject"); + $group->textarea("order_complete_email")->label(t("Order Complete Email"))->id("g-order-complete_email"); + $group->input("order_paid_email_subject")->label(t("Order Paid Email Subject"))->id("g-order-paid_email_subject"); + $group->textarea("order_paid_email")->label(t("Order Paid Email"))->id("g-order-paid_email"); + $group->input("order_paid_delivered_email_subject")->label(t("Order Paid Delivered Email Subject"))->id("g-order-paid-delivered_email_subject"); + $group->textarea("order_paid_delivered_email")->label(t("Order Paid Delivered Email"))->id("g-order-paid-delivered_email"); + $group->input("order_late_payment_email_subject")->label(t("Order Late Payment Email Subject"))->id("g-order-late-payment_email_subject"); + $group->textarea("order_late_payment_email")->label(t("Order Late Payment Email"))->id("g-order-late-payment_email"); + $group->input("order_delivered_email_subject")->label(t("Order Delivered Email Subject"))->id("g-order-delivered_email_subject"); + $group->textarea("order_delivered_email")->label(t("Order Delivered Email"))->id("g-order-delivered_email"); + $group->input("order_delivered_notpaid_email_subject")->label(t("Order Delivered Not Paid Email Subject"))->id("g-order-delivered-notpaid_email_subject"); + $group->textarea("order_delivered_notpaid_email")->label(t("Order Delivered Not Paid Email"))->id("g-order-delivered-notpaid_email"); + $group->input("order_cancelled_email_subject")->label(t("Order Cancelled Email Subject"))->id("g-order-cancelled_email_subject"); + $group->textarea("order_cancelled_email")->label(t("Order Cancelled Email"))->id("g-order-cancelled_email"); + $group->textarea("order_email_closing")->label(t("Order Email Closing"))->id("g-order-email-closing"); + $group->submit("")->value(t("Save")); + return $form; + } + + static function populateForm($form){ + $form->configure->webshop->value(basket::getWebshop()); + $form->configure->website->value(basket::getWebsite()); + $form->configure->email->value(basket::getEmailAddress()); + $form->configure->side_bar->checked(basket::is_side_bar_only()); + $form->configure->paypal->checked(basket::isPaypal()); + $form->configure->paypal_account->value(basket::getPaypalAccount()); + $form->configure->currency->selected(basket::getCurrency()); + $form->configure->allow_pickup->checked(basket::isAllowPickup()); + $form->configure->pickup_location->value(basket::getPickupLocation()); + $form->configure->order_prefix->value(basket::getOrderPrefix()); + $form->configure->order_bankaccount->value(basket::getOrderBankAccount()); + $form->configure->order_accountowner->value(basket::getOrderAccountOwner()); + } + + static function populateTemplateForm($form){ + $form->configure->payment_details->value(basket::getPaymentDetails()); + $form->configure->order_complete_page->value(basket::getOrderCompletePage()); + $form->configure->order_complete_email_subject->value(basket::getOrderCompleteEmailSubject()); + $form->configure->order_complete_email->value(basket::getOrderCompleteEmail()); + $form->configure->order_paid_email_subject->value(basket::getOrderPaidEmailSubject()); + $form->configure->order_paid_email->value(basket::getOrderPaidEmail()); + $form->configure->order_paid_delivered_email_subject->value(basket::getOrderPaidDeliveredEmailSubject()); + $form->configure->order_paid_delivered_email->value(basket::getOrderPaidDeliveredEmail()); + $form->configure->order_late_payment_email_subject->value(basket::getOrderLatePaymentEmailSubject()); + $form->configure->order_late_payment_email->value(basket::getOrderLatePaymentEmail()); + $form->configure->order_delivered_email_subject->value(basket::getOrderDeliveredEmailSubject()); + $form->configure->order_delivered_email->value(basket::getOrderDeliveredEmail()); + $form->configure->order_delivered_notpaid_email_subject->value(basket::getOrderDeliveredNotPaidEmailSubject()); + $form->configure->order_delivered_notpaid_email->value(basket::getOrderDeliveredNotPaidEmail()); + $form->configure->order_cancelled_email_subject->value(basket::getOrderCancelledEmailSubject()); + $form->configure->order_cancelled_email->value(basket::getOrderCancelledEmail()); + $form->configure->order_email_closing->value(basket::getOrderEmailClosing()); + } + + static function extractForm($form){ + $webshop = $form->configure->webshop->value; + $website = $form->configure->website->value; + $email = $form->configure->email->value; + $is_side_bar = $form->configure->side_bar->value; + $isPaypal = $form->configure->paypal->value; + $paypal_account = $form->configure->paypal_account->value; + $currency = $form->configure->currency->selected; + $allow_pickup = $form->configure->allow_pickup->value; + $pickup_location = $form->configure->pickup_location->value; + $order_prefix = $form->configure->order_prefix->value; + $order_bankaccount = $form->configure->order_bankaccount->value; + $order_accountowner = $form->configure->order_accountowner->value; + basket::setWebshop($webshop); + basket::setWebsite($website); + basket::setEmailAddress($email); + basket::set_side_bar_only($is_side_bar); + basket::setPaypal($isPaypal); + basket::setPaypalAccount($paypal_account); + basket::setCurrency($currency); + basket::setAllowPickup($allow_pickup); + basket::setPickupLocation($pickup_location); + basket::setOrderPrefix($order_prefix); + basket::setOrderBankAccount($order_bankaccount); + basket::setOrderAccountOwner($order_accountowner); + } + static function extractTemplateForm($form){ + $payment_details = $form->configure->payment_details->value; + $order_complete_page = $form->configure->order_complete_page->value; + $order_complete_email_subject = $form->configure->order_complete_email_subject->value; + $order_complete_email = $form->configure->order_complete_email->value; + $order_paid_email_subject = $form->configure->order_paid_email_subject->value; + $order_paid_email = $form->configure->order_paid_email->value; + $order_paid_delivered_email_subject = $form->configure->order_paid_delivered_email_subject->value; + $order_paid_delivered_email = $form->configure->order_paid_delivered_email->value; + $order_late_payment_email_subject = $form->configure->order_late_payment_email_subject->value; + $order_late_payment_email = $form->configure->order_late_payment_email->value; + $order_delivered_email_subject = $form->configure->order_delivered_email_subject->value; + $order_delivered_email = $form->configure->order_delivered_email->value; + $order_delivered_notpaid_email_subject = $form->configure->order_delivered_notpaid_email_subject->value; + $order_delivered_notpaid_email = $form->configure->order_delivered_notpaid_email->value; + $order_cancelled_email_subject = $form->configure->order_cancelled_email_subject->value; + $order_cancelled_email = $form->configure->order_cancelled_email->value; + $order_email_closing = $form->configure->order_email_closing->value; + basket::setPaymentDetails($payment_details); + basket::setOrderCompletePage($order_complete_page); + basket::setOrderCompleteEmailSubject($order_complete_email_subject); + basket::setOrderCompleteEmail($order_complete_email); + basket::setOrderPaidEmailSubject($order_paid_email_subject); + basket::setOrderPaidEmail($order_paid_email); + basket::setOrderPaidDeliveredEmailSubject($order_paid_delivered_email_subject); + basket::setOrderPaidDeliveredEmail($order_paid_delivered_email); + basket::setOrderLatePaymentEmailSubject($order_late_payment_email_subject); + basket::setOrderLatePaymentEmail($order_late_payment_email); + basket::setOrderDeliveredEmailSubject($order_delivered_email_subject); + basket::setOrderDeliveredEmail($order_delivered_email); + basket::setOrderDeliveredNotPaidEmailSubject($order_delivered_notpaid_email_subject); + basket::setOrderDeliveredNotPaidEmail($order_delivered_notpaid_email); + basket::setOrderCancelledEmailSubject($order_cancelled_email_subject); + basket::setOrderCancelledEmail($order_cancelled_email); + basket::setOrderEmailClosing($order_email_closing); + } + + static public function is_side_bar_only(){ + return module::get_var("basket","is_side_bar_only"); + } + + static public function set_side_bar_only($value){ + module::set_var("basket","is_side_bar_only",$value); + } + + static function getWebshop(){ + return module::get_var("basket","webshop"); + } + + static function getWebsite(){ + return module::get_var("basket","website"); + } + + static function getEmailAddress(){ + return module::get_var("basket","email"); + } + + static function isPaypal(){ + return module::get_var("basket","paypal"); + } + + static function getPaypalAccount(){ + return module::get_var("basket","paypal_account"); + } + + static function getCurrency(){ + $cur = module::get_var("basket","currency"); + if (!isset($cur)) + { + $cur = "EUR"; + } + return $cur; + } + /* + * Get pickup location from user profile unless it's empty. Then get it from the general settings. + */ + static function getPickupLocation(){ + $user = identity::active_user(); + $user_basket = ORM::factory("user_basket")->where("id", "=", $user->id)->find(); + $pickup_location = $user_basket->pickup_location; + if (($pickup_location == "") or ($pickup_location == null)) { + $pickup_location = module::get_var("basket","pickup_location");} + return $pickup_location; + } + + static function getPaymentDetails(){ + return module::get_var("basket","payment_details"); + } + + static function getOrderBankAccount(){ + return module::get_var("basket","order_bankaccount"); + } + + static function getOrderAccountOwner(){ + return module::get_var("basket","order_accountowner"); + } + + static function getOrderPrefix(){ + return module::get_var("basket","order_prefix"); + } + + static function isAllowPickup(){ + return module::get_var("basket","allow_pickup"); + } + + static function getOrderCompletePage(){ + return module::get_var("basket","order_complete_page"); + } + + static function getOrderCompleteEmail(){ + return module::get_var("basket","order_complete_email"); + } + static function getOrderCompleteEmailSubject(){ + return module::get_var("basket","order_complete_email_subject"); + } + + static function getOrderPaidEmail(){ + return module::get_var("basket","order_paid_email"); + } + static function getOrderPaidEmailSubject(){ + return module::get_var("basket","order_paid_email_subject"); + } + + static function getOrderPaidDeliveredEmail(){ + return module::get_var("basket","order_paid_delivered_email"); + } + static function getOrderPaidDeliveredEmailSubject(){ + return module::get_var("basket","order_paid_delivered_email_subject"); + } + + static function getOrderLatePaymentEmail(){ + return module::get_var("basket","order_late_payment_email"); + } + static function getOrderLatePaymentEmailSubject(){ + return module::get_var("basket","order_late_payment_email_subject"); + } + + static function getOrderDeliveredEmail(){ + return module::get_var("basket","order_delivered_email"); + } + static function getOrderDeliveredEmailSubject(){ + return module::get_var("basket","order_delivered_email_subject"); + } + + static function getOrderDeliveredNotPaidEmail(){ + return module::get_var("basket","order_delivered_notpaid_email"); + } + static function getOrderDeliveredNotPaidEmailSubject(){ + return module::get_var("basket","order_delivered_notpaid_email_subject"); + } + + static function getOrderCancelledEmail(){ + return module::get_var("basket","order_cancelled_email"); + } + static function getOrderCancelledEmailSubject(){ + return module::get_var("basket","order_cancelled_email_subject"); + } + + static function getOrderEmailClosing(){ + return module::get_var("basket","order_email_closing"); + } + + static function formatMoney($money){ + return self::$format[self::getCurrency()].number_format($money,2,',','.'); +// return self::$format[self::getCurrency()].number_format($money,2); + } + + static function formatMoneyForWeb($money){ + return self::$formatweb[self::getCurrency()]." ".number_format($money,2,',','.'); +//return self::$formatweb[self::getCurrency()].number_format($money,2); + } + + static function formatMoneyForMail($money){ + return basket::getCurrency()." ".number_format($money,2,',','.'); + } + + static function replaceStrings($string, $key_values) { + // Replace x_y before replacing x. + krsort($key_values, SORT_STRING); + + $keys = array(); + $values = array(); + foreach ($key_values as $key => $value) { + $keys[] = "%$key"; + $values[] = $value; + } + return str_replace($keys, $values, $string); + } + +//Added 2011-10-02 + static function replaceStringsAll($string, $order) { + $string_new = basket::replaceStrings($string,Array( + "name"=>$order->name, + "order_number"=> basket::getOrderPrefix().$order->id, + "total_cost" => basket::formatMoneyForMail($order->cost), + "order_details"=> $order->text, + "email"=>basket::getEmailAddress(), + "pickup_location"=> basket::getPickupLocation(), + "website"=> basket::getWebsite(), + "webshop"=> basket::getWebshop())); + return $string_new; + } + +//Added 2011-10-02 + static function createFullName($basket) { + if ($basket->title <> ""):$fullname = $basket->title." "; endif; + if ($basket->initials <> ""):$fullname = $fullname."".$basket->initials." "; endif; + if ($basket->insertion <> ""):$fullname = $fullname."".$basket->insertion." "; endif; + $fullname = $fullname."".$basket->name.""; + return $fullname; + } + +//Added 2011-10-02 + static function deliveryMethod($order) { +//@TODO: configurable delivery methods + if ($order->method == Order_Model::DELIVERY_MAIL) {$delivery_method = "verstuurd per post";} + elseif ($order->method == Order_Model::DELIVERY_EMAIL) {$delivery_method = "verstuurd per e-mail";} + elseif ($order->method == Order_Model::DELIVERY_PICKUP) {$delivery_method = "klaargelegd om af te halen bij ".basket::getPickupLocation()."";} + else {$delivery_method = "GEEN LEVERINGSWIJZE BEKEND";} + return $delivery_method; +} + + static function setWebshop($webshop){ + module::set_var("basket","webshop",$webshop); + } + + static function setWebsite($website){ + module::set_var("basket","website",$website); + } + + static function setEmailAddress($email){ + module::set_var("basket","email",$email); + } + + static function setPaypal($paypal){ + module::set_var("basket","paypal",$paypal); + } + + static function setPaypalAccount($paypal_account){ + module::set_var("basket","paypal_account",$paypal_account); + } + + static function setCurrency($currency){ + module::set_var("basket","currency",$currency); + } + + static function setPickupLocation($pickup_location){ + module::set_var("basket","pickup_location",$pickup_location); + } + + static function setPaymentDetails($details){ + module::set_var("basket","payment_details",$details); + } + + static function setOrderBankAccount($order_bankaccount){ + module::set_var("basket","order_bankaccount",$order_bankaccount); + } + + static function setOrderAccountOwner($order_accountowner){ + module::set_var("basket","order_accountowner",$order_accountowner); + } + + static function setAllowPickup($allow_pickup){ + module::set_var("basket","allow_pickup",$allow_pickup); + } + + static function setOrderPrefix($order_prefix){ + module::set_var("basket","order_prefix",strtolower($order_prefix)); + } + + static function setOrderCompletePage($details){ + module::set_var("basket","order_complete_page",$details); + } + + static function setOrderCompleteEmail($details){ + module::set_var("basket","order_complete_email",$details); + } + static function setOrderCompleteEmailSubject($details){ + module::set_var("basket","order_complete_email_subject",$details); + } + + static function setOrderLatePaymentEmail($details){ + module::set_var("basket","order_late_payment_email",$details); + } + static function setOrderLatePaymentEmailSubject($details){ + module::set_var("basket","order_late_payment_email_subject",$details); + } + + static function setOrderPaidEmail($details){ + module::set_var("basket","order_paid_email",$details); + } + static function setOrderPaidEmailSubject($details){ + module::set_var("basket","order_paid_email_subject",$details); + } + + static function setOrderPaidDeliveredEmail($details){ + module::set_var("basket","order_paid_delivered_email",$details); + } + static function setOrderPaidDeliveredEmailSubject($details){ + module::set_var("basket","order_paid_delivered_email_subject",$details); + } + + static function setOrderDeliveredEmail($details){ + module::set_var("basket","order_delivered_email",$details); + } + static function setOrderDeliveredEmailSubject($details){ + module::set_var("basket","order_delivered_email_subject",$details); + } + + static function setOrderDeliveredNotPaidEmail($details){ + module::set_var("basket","order_delivered_notpaid_email",$details); + } + static function setOrderDeliveredNotPaidEmailSubject($details){ + module::set_var("basket","order_delivered_notpaid_email_subject",$details); + } + + static function setOrderCancelledEmail($details){ + module::set_var("basket","order_cancelled_email",$details); + } + static function setOrderCancelledEmailSubject($details){ + module::set_var("basket","order_cancelled_email_subject",$details); + } + + static function setOrderEmailClosing($details){ + module::set_var("basket","order_email_closing",$details); + } + + static function createOrder($basket, $method){ + +// fill customer record; added 2011-08-20 + $customer = ORM::factory("customer"); + $customer->title=$basket->title; + $customer->initials=$basket->initials; + $customer->insertion=$basket->insertion; + $customer->name=$basket->name; + $customer->street=$basket->street; + $customer->housenumber=$basket->house; + $customer->postalcode=$basket->postcode; + $customer->town=$basket->town; + $customer->email=$basket->email; + $customer->phone=$basket->phone; +// $customer->childname=$basket->childname; +// $customer->childgroup=$basket->childgroup; + $customer->deliverypref=$basket->ispp(); + $customer->save(); + + $order = ORM::factory("order"); + $order->text = "processing"; + $order->customerid=$customer->id; + $order->save(); + + $ordernumber = basket::getOrderPrefix().$order->id; + $order_bankaccount = basket::getOrderBankAccount(); + $order_accountowner = basket::getOrderAccountOwner(); + $order_email_closing = basket::getOrderEmailClosing(); + //$admin_address = basket::getEmailAddress(); + $website=basket::getWebsite(); + $postage = $basket->postage_cost(); + $product_cost = $basket->cost(); + $street = $basket->street; + $fullname = basket::createFullName($basket); + $ppon = $basket->ispp(); + if ($ppon){ + $total_cost = ($product_cost+$postage); + } + else{ + $total_cost = $product_cost; + } + // added Dutch mailtext JtK + //set the timezone to show correct order time + date_default_timezone_set('Europe/Amsterdam'); + $text = "U kunt betalen door het totaalbedrag over te maken op de bankrekening van %webshop. +Totaalbedrag: ".basket::formatMoneyForMail($total_cost)." +Rekeningnummer: ".$order_bankaccount." + tnv ".$order_accountowner." + ovv bestelnummer ".$ordernumber." + +De aflevering vindt plaats circa 10 werkdagen nadat uw betaling is ontvangen door %webshop. +Voor vragen of opmerkingen over uw bestelling kunt u contact opnemen via bestelling@%website. + +BESTELGEGEVENS +Bestelnummer: ".$ordernumber." +Besteld op ".date("d-m-Y G:i")." + +Bestemd voor: + ".$fullname.""; + if ($street <> ""){ + $text = $text." + ".$basket->street." ".$basket->house." + ".$basket->postcode." ".$basket->town.""; + } +$text = $text." + + E-mail: ".$basket->email.""; + if ($basket->phone <> ""){ + $text = $text." + Telefoon: ".$basket->phone." +"; } + if ($basket->comments <> ""){ + $text = $text." +Opmerking bij de bestelling: ".$basket->comments." +"; } +$text = $text." + +Bestelbedrag: ".basket::formatMoneyForMail($product_cost); + // continue with payment details + // posting by normal mail + if ($ppon && $postage > 0){ + $method = Order_Model::DELIVERY_MAIL; + $text = $text." +Verpakkings- en verzendkosten: ".basket::formatMoneyForMail($postage)." +Bestelling wordt verstuurd via post."; + } + // pickup + elseif (!$ppon && $postage > 0){ + $method = Order_Model::DELIVERY_PICKUP; + $text = $text." +Bestelling afhalen bij %pickup_location."; + } + // posting by e-mail + else{ + $method = Order_Model::DELIVERY_EMAIL; + $text = $text." +Bestelling wordt verstuurd via e-mail."; + } + $text = $text." +Totaalbedrag: ".basket::formatMoneyForMail($total_cost).""; + + // continue with order details + $text = $text." + +Bestelde foto's:"; + // create the order items + foreach ($basket->contents as $basket_item){ + $item = $basket_item->getItem(); + $prod = ORM::factory("product", $basket_item->product); + $text = $text." +-> ".$item->title." + ".$prod->name." - ".$prod->description." + aantal: ".$basket_item->quantity." a ".basket::formatMoneyForMail($prod->cost)." +"; } + // continue with footer + $text = $text." +".$order_email_closing.""; + //replace variables + $text = basket::replaceStringsAll($text,$order); + + $order->name = $fullname; + $order->email = $basket->email; + $order->cost = $total_cost; + $order->text = $text; + $order->status = Order_Model::WAITING_PAYMENT; + $order->method = $method; + $order->save(); + + //$basket->clear(); + + return $order; + } + + public function send_order($order){ +/* internal order mail */ + $to = basket::getEmailAddress(); + $from = "From: ".basket::getEmailAddress(); + $subject = "Bestelling ".basket::getOrderPrefix().$order->id." van ".$order->name; + $body = $order->text; + //send mail + mail($to, $subject, $body, $from); + } + + public function send_invoice($order){ + // order confirmation mail to customer + $to = $order->email; + $from = "From: ".basket::getEmailAddress(); + $subject = basket::replaceStringsAll(basket::getOrderCompleteEmailSubject(),$order); + $body = basket::getOrderCompleteEmail(); + //replace variables + $body = basket::replaceStringsAll($body,$order); + //send mail + mail($to, $subject, $body, $from); + } + + public function send_invoice_copy($order){ + // order confirmation mail to customer + $to = $order->email; + $from = "From: ".basket::getEmailAddress(); + $subject = basket::replaceStringsAll(basket::getOrderCompleteEmailSubject(),$order); + $subject = $subject." (KOPIE)"; + $body = basket::getOrderCompleteEmail(); + //replace variables + $body = basket::replaceStringsAll($body,$order); + //send mail + mail($to, $subject, $body, $from); + } + +public function send_payment_confirmation($order){ + // payment confirmation mail to customer + $to = $order->email; + $from = "From: ".basket::getEmailAddress(); + if ($order->status == Order_Model::PAYMENT_CONFIRMED) { + $subject = basket::replaceStringsAll(basket::getOrderPaidEmailSubject(),$order); + $body = basket::getOrderPaidEmail(); + } + elseif ($order->status == Order_Model::DELIVERED) { + $subject = basket::replaceStringsAll(basket::getOrderPaidDeliveredEmailSubject(),$order); + $body = basket::getOrderPaidDeliveredEmail(); + } + $body = $body." +".basket::getOrderEmailClosing().""; + //replace variables + $body = basket::replaceStringsAll($body,$order); + //send mail + mail($to, $subject, $body, $from); + } + + public function send_payment_reminder($order){ + // payment reminder mail to customer + $to = $order->email; +/* +@TODO: replace with getEmailAdressFrom +*/ + $from = "From: ".basket::getEmailAddress(); + $subject = basket::replaceStringsAll(basket::getOrderLatePaymentEmailSubject(),$order); + $body = basket::getOrderLatePaymentEmail()." +".basket::getOrderEmailClosing()." + +OORSPRONKELIJKE BESTELGEGEVENS +".$order->text.""; + //replace variables + $body = basket::replaceStringsAll($body,$order); + //send mail + mail($to, $subject, $body, $from); + } + + public function send_delivery_confirmation($order){ + // delivered confirmation mail to customer + $to = $order->email; + $from = "From: ".basket::getEmailAddress(); + if ($order->status == Order_Model::DELIVERED) { + $subject = basket::replaceStringsAll(basket::getOrderdeliveredEmailSubject(),$order); + $body = basket::getOrderDeliveredEmail(); + } + elseif ($order->status == Order_Model::DELIVERED_NOTPAID) { + $subject = basket::replaceStringsAll(basket::getOrderDeliveredNotPaidEmailSubject(),$order); + $body = basket::getOrderDeliveredNotPaidEmail(); + } + $body = $body." +".basket::getOrderEmailClosing().""; + //replace variables + $body = basket::replaceStringsAll($body,$order); + $body = basket::replaceStrings($body,Array("delivery_method"=>basket::deliveryMethod($order))); + //send mail + mail($to, $subject, $body, $from); + } + + public function send_cancellation_confirmation($order){ + // delivery cancelled mail to customer + $to = $order->email; + $from = "From: ".basket::getEmailAddress(); + $subject = basket::replaceStringsAll(basket::getOrderCancelledEmailSubject(),$order); + $body = basket::getOrderCancelledEmail()." +".basket::getOrderEmailClosing().""; + //replace variables + $body = basket::replaceStringsAll($body,$order); + //send mail + mail($to, $subject, $body, $from); + } + +} \ No newline at end of file diff --git a/3.0/modules/basket_plus/helpers/basket_block.php b/3.0/modules/basket_plus/helpers/basket_block.php new file mode 100644 index 00000000..7ee99c1a --- /dev/null +++ b/3.0/modules/basket_plus/helpers/basket_block.php @@ -0,0 +1,21 @@ + t("Basket")); + } + + static function get($block_id, $theme) { + $block = ""; + switch ($block_id) { + case "shopping": + $block = new Block(); + $block->css_id = "g-view-basket"; + $block->title = t("Basket"); + $block->content = new View("basket-side-bar.html"); + $block->content->basket = Session_Basket::get(); + break; + } + return $block; + } +} \ No newline at end of file diff --git a/3.0/modules/basket_plus/helpers/basket_event.php b/3.0/modules/basket_plus/helpers/basket_event.php new file mode 100644 index 00000000..51b8edb1 --- /dev/null +++ b/3.0/modules/basket_plus/helpers/basket_event.php @@ -0,0 +1,127 @@ +add_after("users_groups", + $basket_menu = Menu::factory("submenu") + ->id("basket_menu") + ->label(t("Basket"))); + $basket_menu->append( + Menu::factory("link") + ->id("configure") + ->label(t("Configure")) + ->url(url::site("admin/configure"))); + $basket_menu->append( + Menu::factory("link") + ->id("templates") + ->label(t("Templates")) + ->url(url::site("admin/configure/templates"))); + $basket_menu->append( + Menu::factory("link") + ->id("product_line") + ->label(t("Product Lines")) + ->url(url::site("admin/product_lines"))); + $basket_menu->append( + Menu::factory("link") + ->id("postage_bands") + ->label(t("Postage Bands")) + ->url(url::site("admin/postage_bands"))); + $basket_menu->append( + Menu::factory("link") + ->id("view_orders") + ->label(t("View Orders")) + ->url(url::site("basket/view_orders"))); + $basket_menu->append( + Menu::factory("link") + ->id("view_all_orders") + ->label(t("View All Orders")) + ->url(url::site("basket/view_all_orders"))); + } + + static function item_edit_form($item, $form){ + $group = $form->group("products")->label(t("Available Products")); + + $product_override = ORM::factory("product_override")->where('item_id', "=", $item->id)->find(); + $group->checkbox("all")->label(t("No products except..")); + if ($product_override->loaded()){ + $group->all->checked($product_override->none); + } + + $products = ORM::factory("product")->find_all(); + foreach ($products as $product){ + $p_group = $group->group("product_$product->id")->label(t("$product->description")); + + $description = $product->description; + $cost = $product->cost; + $checked = false; + + if ($product_override->loaded()){ + $item_product = ORM::factory("item_product") + ->where('product_override_id', "=", $product_override->id) + ->where('product_id', "=", $product->id)->find(); + if ($item_product->loaded()){ + $checked = $item_product->include; + if ($item_product->cost != -1){ + $cost = $item_product->cost; + } + } + } + + $p_group->checkbox("exclude_$product->id")->label($description)->checked($checked); + $p_group->input("cost_$product->id")->label(t("Cost"))->value($cost); + //$producta[$product->id] = $product->description." (".basket::formatMoney($product->cost).")"; + } + } + + static function item_edit_form_completed($item, $form){ + $product_override = ORM::factory("product_override")->where('item_id', "=", $item->id)->find(); + + if ($form->products->all->checked) + { + $product_override->none = $form->products->all->checked; + $product_override->item_id=$item->id; + $product_override->save(); + $products = ORM::factory("product")->find_all(); + foreach ($products as $product){ + $p_group = $form->products->__get("product_$product->id"); + $item_product = ORM::factory("item_product") + ->where('product_override_id', "=", $product_override->id) + ->where('product_id', "=", $product->id)->find(); + + $item_product->include = $p_group->__get("exclude_$product->id")->checked; + $item_product->cost = $p_group->__get("cost_$product->id")->value; + $item_product->product_id = $product->id; + $item_product->product_override_id = $product_override->id; + $item_product->save(); + } + } + else + { + if ($product_override->loaded()){ + $product_override->delete(); + } + } + } +} \ No newline at end of file diff --git a/3.0/modules/basket_plus/helpers/basket_installer.php b/3.0/modules/basket_plus/helpers/basket_installer.php new file mode 100644 index 00000000..a8e96b20 --- /dev/null +++ b/3.0/modules/basket_plus/helpers/basket_installer.php @@ -0,0 +1,299 @@ +query("CREATE TABLE IF NOT EXISTS {products} ( + `id` int(9) NOT NULL auto_increment, + `name` TEXT NOT NULL, + `cost` DECIMAL(10,2) default 0, + `description` varchar(1024), + `postage_band_id` int(9) default 1, + PRIMARY KEY (`id`)) + ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + $db->query("CREATE TABLE IF NOT EXISTS {product_overrides} ( + `id` int(9) NOT NULL auto_increment, + `item_id` int(9) NOT NULL, + `none` BOOLEAN default false, + PRIMARY KEY (`id`)) + ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + $db->query("CREATE TABLE IF NOT EXISTS {item_products} ( + `id` int(9) NOT NULL auto_increment, + `product_override_id` int(9) NOT NULL, + `product_id` int(9) NOT NULL, + `include` BOOLEAN default false, + `cost` DECIMAL(10,2) default -1, + PRIMARY KEY (`id`)) + ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + $db->query("CREATE TABLE IF NOT EXISTS {postage_bands} ( + `id` int(9) NOT NULL auto_increment, + `name` TEXT NOT NULL, + `flat_rate` DECIMAL(10,2) default 0, + `per_item` DECIMAL(10,2) default 0, + PRIMARY KEY (`id`)) + ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + +//2011-08-20 added customerid + $db->query("CREATE TABLE IF NOT EXISTS {orders} ( + `id` int(9) NOT NULL auto_increment, + `customerid` int(9) NOT NULL, + `status` int(9) DEFAULT 0, + `name` varchar(512), + `email` varchar(256), + `cost` DECIMAL(10,2) default 0, + `method` int(9) DEFAULT 0, + `text` TEXT NOT NULL, + PRIMARY KEY (`id`)) + ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + +//2011-08-20 added table + $db->query("CREATE TABLE IF NOT EXISTS {customers} ( + `id` int(9) NOT NULL AUTO_INCREMENT, + `title` varchar(32) DEFAULT NULL, + `name` varchar(256) NOT NULL, + `initials` varchar(64) DEFAULT NULL, + `insertion` varchar(16) DEFAULT NULL, + `street` varchar(128) DEFAULT NULL, + `housenumber` varchar(32) DEFAULT NULL, + `postalcode` varchar(16) DEFAULT NULL, + `town` varchar(128) DEFAULT NULL, + `email` varchar(128) NOT NULL, + `phone` varchar(16) DEFAULT NULL, + `childname` varchar(64) DEFAULT NULL, + `childgroup` varchar(32) DEFAULT NULL, + `deliverypref` tinyint(2) DEFAULT NULL, + PRIMARY KEY (`id`)) + ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + +//2011-05-01 added table + $db->query("CREATE TABLE IF NOT EXISTS {order_logs} ( + `id` int(9) NOT NULL, + `status` int(9) NOT NULL, + `event` int(9) NOT NULL, + `timestamp` int(9) NOT NULL) + ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + $db->query("CREATE TABLE IF NOT EXISTS `ipn_messages` ( + `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, + `date` int(11) NOT NULL, + `key` varchar(20) NOT NULL, + `txn_id` varchar(20) NOT NULL, + `status` varchar(20) NOT NULL, + `success` bool default false, + `text` text, + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + /* name, fixed cost, per item cost */ +/* postage_band::create("Geen verzendkosten",0,0); + postage_band::create("Standaard verzendkosten",2,0); + postage_band::create("Verzending via e-mail (gratis)",0,0); +*/ + /* name, cost, descr, postageband id */ +/* product::create("13x18",3.5,"Afdruk 13x18 cm glanzend",2); + product::create("2x 13x18",5,"ACTIE: Dubbele afdruk 13x18 cm glanzend",2); + product::create("Origineel",7.5,"Originele fotobestand in hoge resolutie",3); + product::create("8 Pasfoto's+9x13",4,"Vel met 8 pasfoto's + afdruk 9x13",2); + product::create("16 Pasfoto's",4,"Vel met 16 pasfoto's glanzend",2); + product::create("10x15",2.5,"Afdruk 10x15 cm glanzend",2); + product::create("20x30",6,"Afdruk 20x30 cm glanzend",2); + product::create("30x45",10,"Afdruk 30x45 cm glanzend",2); + product::create("13x18 (korting)",1.75,"Afdruk 13x18 cm glanzend",2); + product::create("20x30 (korting)",3,"Afdruk 20x30 cm glanzend",2); + product::create("Origineel (korting)",2.5,"Originele fotobestand in hoge resolutie",3); +*/ + /* basket config settings */ + basket::setWebsite("kidsfotos.nl"); + basket::setWebshop("KidsFotos"); + basket::setEmailAddress("KidsFotos.nl "); + basket::set_side_bar_only("1"); + basket::setAllowPickup("1"); + basket::setPickupLocation("De Blauwe Walvis"); + basket::setOrderPrefix("2012-"); + basket::setOrderBankAccount("59.24.98.220"); + basket::setOrderAccountOwner("J. ten Kate, Utrecht"); + + /* basket template settings */ + basket::setPaymentDetails(" +

U kunt betalen via overmaking op de bankrekening van %webshop.

+

Instructies vindt u in de bevestingsmail van de bestelling.

+
+

Algemene voorwaarden

+

U kunt de Algemene voorwaarden via deze link bekijken.

"); + basket::setOrderCompletePage( +"

Hartelijk dank voor uw bestelling. Uw bestelnummer is %order_number.

+
+

%webshop heeft een bevestigingsmail verzonden met de gegevens van uw bestelling en de betalingsinformatie. +

Wij verwerken de bestelling zodra de betaling is ontvangen. +
+

Voor vragen of opmerkingen over uw bestelling kunt u contact opnemen via bestelling@%website

"); + + basket::setOrderCompleteEmailSubject("Uw bestelling %order_number bij %webshop"); + basket::setOrderCompleteEmail("Beste %name, + +Hartelijk dank voor uw bestelling. De bestelgegevens en betalingsinformatie vindt u hieronder. + +%order_details"); + + basket::setOrderPaidEmailSubject("Update van uw bestelling %order_number bij %webshop: betaling ontvangen"); + basket::setOrderPaidEmail("Beste %name, + +%webshop heeft uw betaling van %total_cost ontvangen en zal bestelling %order_number verwerken. +U ontvangt een e-mail zodra de bestelling naar u wordt verzonden of klaarligt op het kinderdagverblijf. + +Voor vragen of opmerkingen over uw bestelling kunt u contact opnemen via bestelling@%website."); + + basket::setOrderLatePaymentEmailSubject("Uw bestelling %order_number bij %webshop: wacht op betaling"); + basket::setOrderLatePaymentEmail("Beste %name, + +Enige tijd geleden heeft u bij %webshop bestelling %order_number geplaatst. Onderaan vindt u hiervan de details. +Uit onze administratie blijkt dat het bedrag van %total_cost nog niet is voldaan. Wij maken u erop attent dat wij pas na ontvangst van de betaling de bestelling verwerken. + +Mocht deze herinnering uw betaling hebben gekruist, dan kunt u deze als niet verzonden beschouwen. + +Voor vragen of opmerkingen over uw bestelling kunt u contact opnemen via bestelling@%website."); + + basket::setOrderDeliveredEmailSubject("Update van uw bestelling %order_number bij %webshop: bestelling verstuurd"); + basket::setOrderDeliveredEmail("Beste %name, + +%webshop heeft uw bestelling %order_number %delivery_method. +Nogmaals dank voor uw bestelling en veel plezier met de foto's! + +Voor vragen of opmerkingen over uw bestelling kunt u contact opnemen via bestelling@%website."); + + basket::setOrderEmailClosing("Met vriendelijke groet, +%webshop.nl - Fotograaf Jeroen ten Kate"); + + module::set_version("basket", 5); + } + + static function upgrade($version) { + $db = Database::instance(); + if ($version == 1) { + + // fix for allowing decimel place in money + $db->query("ALTER TABLE {products} CHANGE COLUMN `cost` `cost` DECIMAL(10,2) default 0;"); + $db->query("ALTER TABLE {item_products} CHANGE COLUMN `cost` `cost` DECIMAL(10,2) default -1;"); + + // postage bands + $db->query("ALTER TABLE {products} ADD COLUMN `postage_band_id` int(9) default 1"); + $db->query("CREATE TABLE IF NOT EXISTS {postage_bands} ( + `id` int(9) NOT NULL auto_increment, + `name` TEXT NOT NULL, + `flat_rate` DECIMAL(10,2) default 0, + `per_item` DECIMAL(10,2) default 0, + PRIMARY KEY (`id`)) + ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + postage_band::create("No Postage",0,0); + + module::set_version("basket", $version = 2); + } + + if ($version == 2) { + $db->query("CREATE TABLE IF NOT EXISTS {orders} ( + `id` int(9) NOT NULL auto_increment, + `text` TEXT NOT NULL, + PRIMARY KEY (`id`)) + ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + basket::setPaymentDetails( +"

Use the following options to pay for this order.

+

Send a chequre to..

+

Visit the shop..

+

By using internet banking..

" + ); + basket::setOrderPrefix("ORDER"); + basket::setOrderCompletePage( +"

Your order number is %order_number. To pay for this order please either:

+

- Send a cheque for %total_cost to with reference %order_number..

+

- Visit the shop and quote the order %order_number..

+

- Transfer %total_cost using internet banking with reference %order_number..

+

Order will be processed as soon as payment is received. You should receive an e-mail with your order details shortly.

" + ); + basket::setOrderCompleteEmail( +"Hi %name, + +Thank you for your order the order details are below. To pay for this order please either: + +- Send a cheque for %total_cost to with reference %order_number.. +- Visit the shop and quote the order %order_number.. +- Transfer %total_cost using internet banking with reference %order_number.. + +Order will be processed as soon as payment is received. For order pick-ups please visit.. + +Order Details +------------- +%order_details + +Thanks"); + basket::setOrderCompleteEmailSubject( +"Photography Order %order_number"); + + module::set_version("basket", $version = 3); + } + + if ($version ==3 ){ + $db->query("ALTER TABLE {orders} ADD COLUMN `status` int(9) DEFAULT 0;"); + + $db->query("CREATE TABLE IF NOT EXISTS {ipn_messages} ( + `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, + `date` int(11) NOT NULL, + `key` varchar(20) NOT NULL, + `txn_id` varchar(20) NOT NULL, + `status` varchar(20) NOT NULL, + `success` bool default false, + `text` text, + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + module::set_version("basket", $version = 4); + + } + + if ($version==4){ + $db->query("ALTER TABLE {orders} ADD COLUMN `name` varchar(1024);"); + $db->query("ALTER TABLE {orders} ADD COLUMN `email` varchar(1024);"); + $db->query("ALTER TABLE {orders} ADD COLUMN `method` int(9) DEFAULT 0;"); + $db->query("ALTER TABLE {orders} ADD COLUMN `cost` DECIMAL(10,2) default 0"); + module::set_version("basket", $version = 5); + } + // + if ($version==5){ + $db->query("ALTER TABLE {orders} ADD COLUMN `customerid` int(9) NOT NULL;"); + $db->query("ALTER TABLE {customers} ADD COLUMN `childname` varchar(64);"); + $db->query("ALTER TABLE {customers} ADD COLUMN `childgroup` varchar(32);"); + module::set_version("basket", $version = 6); + } + } + + static function uninstall(){ + $db = Database::instance(); + $db->query("DROP TABLE IF EXISTS {products}"); + $db->query("DROP TABLE IF EXISTS {product_overrides}"); + $db->query("DROP TABLE IF EXISTS {item_products}"); + $db->query("DROP TABLE IF EXISTS {postage_bands}"); + //$db->query("DROP TABLE IF EXISTS {orders}"); + } +} diff --git a/3.0/modules/basket_plus/helpers/basket_theme.php b/3.0/modules/basket_plus/helpers/basket_theme.php new file mode 100644 index 00000000..39d61665 --- /dev/null +++ b/3.0/modules/basket_plus/helpers/basket_theme.php @@ -0,0 +1,56 @@ +css("basket.css"); + } + + static function header_top($theme) { + + if (!basket::is_side_bar_only()) + { + $view = new View("basket.html"); + + $view->basket = Session_Basket::get(); + return $view->render(); + } + return ""; + } + + static function admin_head($theme) { + if (strpos(Router::$current_uri, "admin/product_lines") !== false) { + $theme->script("gallery.panel.js"); + } + } + static function photo_top($theme){ + if (!basket::is_side_bar_only()) + { + if ( product::isForSale($theme->item()->id)){ + $view = new View("add_to_basket.html"); + + $view->item = $theme->item(); + + return $view->render(); + } + } + return ""; + } +} diff --git a/3.0/modules/basket_plus/helpers/order_log.php b/3.0/modules/basket_plus/helpers/order_log.php new file mode 100644 index 00000000..def91375 --- /dev/null +++ b/3.0/modules/basket_plus/helpers/order_log.php @@ -0,0 +1,46 @@ +id = $order->id; + $log->status = $order->status; + $log->event = $event; + $log->timestamp = time(); + $log->save(); + } +} diff --git a/3.0/modules/basket_plus/helpers/postage_band.php b/3.0/modules/basket_plus/helpers/postage_band.php new file mode 100644 index 00000000..20915800 --- /dev/null +++ b/3.0/modules/basket_plus/helpers/postage_band.php @@ -0,0 +1,97 @@ + "gAddPostageForm")); + $group = $form->group("add_postage")->label(t("Add Postage Band")); + $group->input("name")->label(t("Name"))->id("gPostageName") + ->error_messages("in_use", t("There is already a postage band with that name")); + $group->input("flat_rate")->label(t("Flat Rate"))->id("gFlatRate"); + $group->input("per_item")->label(t("Per Item"))->id("gPetItem"); + $group->submit("")->value(t("Add Postage Band")); + $postage = ORM::factory("postage_band"); + return $form; + } + + static function get_edit_form_admin($postage) { + $form = new Forge("admin/postage_bands/edit_postage_band/$postage->id", "", "post", + array("id" => "gEditPostageForm")); + $group = $form->group("edit_postage")->label(t("Edit Postage Band")); + $group->input("name")->label(t("Name"))->id("gPostageName")->value($postage->name); + $group->inputs["name"]->error_messages( + "in_use", t("There is already a postage band with that name")); + $group->input("flat_rate")->label(t("Flat Rate"))->id("gFlatRate")->value($postage->flat_rate); + $group->input("per_item")->label(t("Per Item"))->id("gPetItem")-> + value($postage->per_item); + + $group->submit("")->value(t("Modify Postage Band")); + return $form; + } + + + static function get_delete_form_admin($postage) { + $form = new Forge("admin/postage_bands/delete_postage_band/$postage->id", "", "post", + array("id" => "gDeletePostageForm")); + $group = $form->group("delete_postage")->label( + t("Are you sure you want to delete postage band %name?", array("name" => $postage->name))); + $group->submit("")->value(t("Delete postage band %name", array("name" => $postage->name))); + return $form; + } + + /** + * Create a new postage band + * + * @param string $name + * @param string $full_name + * @param string $password + * @return User_Model + */ + static function create($name, $flatrate, $peritemcost) { + $postage = ORM::factory("postage_band")->where("name", "=", $name)->find(); + if ($postage->loaded()) { + throw new Exception("@todo postage already EXISTS $name"); + } + + $postage->name = $name; + $postage->flat_rate = $flatrate; + $postage->per_item = $peritemcost; + + $postage->save(); + return $postage; + } + + /** + * returns the array of postage bands + * @return an array of postage bands + */ + static function getPostageArray(){ + $postagea = array(); + + $postages = ORM::factory("postage_band")->find_all(); + foreach ($postages as $postage){ + $show = true; + $postagea[$postage->id] = $postage->name; + } + + return $postagea; + } + +} \ No newline at end of file diff --git a/3.0/modules/basket_plus/helpers/product.php b/3.0/modules/basket_plus/helpers/product.php new file mode 100644 index 00000000..8794c1d9 --- /dev/null +++ b/3.0/modules/basket_plus/helpers/product.php @@ -0,0 +1,189 @@ + "gAddProductForm")); + $group = $form->group("add_product")->label(t("Add Product")); + $group->input("name")->label(t("Name"))->id("gProductName") + ->error_messages("in_use", t("There is already a product with that name")); + $group->input("cost")->label(t("Cost"))->id("gCost"); + $group->input("description")->label(t("Description"))->id("gDescription"); + $group->dropdown("postage_band") + ->label(t("Postage Band")) + ->options(postage_band::getPostageArray()); + $group->submit("")->value(t("Add Product")); + $product = ORM::factory("product"); + return $form; + } + + static function get_edit_form_admin($product) { + + $form = new Forge("admin/product_lines/edit_product/$product->id", "", "post", + array("id" => "gEditProductForm")); + $group = $form->group("edit_product")->label(t("Edit Product")); + $group->input("name")->label(t("Name"))->id("gProductName")->value($product->name); + $group->inputs["name"]->error_messages( + "in_use", t("There is already a product with that name")); + $group->input("cost")->label(t("Cost"))->id("gCost")->value($product->cost); + $group->input("description")->label(t("Description"))->id("gDescription")-> + value($product->description); + $group->dropdown("postage_band") + ->label(t("Postage Band")) + ->options(postage_band::getPostageArray()) + ->selected($product->postage_band_id); + + $group->submit("")->value(t("Modify Product")); + return $form; + } + + + static function get_delete_form_admin($product) { + $form = new Forge("admin/product_lines/delete_product/$product->id", "", "post", + array("id" => "gDeleteProductForm")); + $group = $form->group("delete_product")->label( + t("Are you sure you want to delete product %name?", array("name" => $product->name))); + $group->submit("")->value(t("Delete product %name", array("name" => $product->name))); + return $form; + } + + /** + * Create a new product + * + * @param string $name + * @param string $full_name + * @param string $password + * @return User_Model + */ + static function create($name, $cost, $description, $postage_band) { + $product = ORM::factory("product")->where("name", "=", $name)->find(); + if ($product->loaded()) { + throw new Exception("@todo USER_ALREADY_EXISTS $name"); + } + + $product->name = $name; + $product->cost = $cost; + $product->description = $description; + $product->postage_band_id = $postage_band; + $product->save(); + return $product; + } + + static function getProductArray($id){ + $producta = array(); + // check for product override + $product_override = ORM::factory("product_override")->where('item_id', "=", $id)->find(); + + if (!$product_override->loaded()){ + // no override found so check parents + // check parents for product override + $item = ORM::factory("item",$id); + + $parents = $item->parents(); + foreach ($parents as $parent){ + // check for product override + $temp_override = ORM::factory("product_override")->where('item_id', "=", $parent->id)->find(); + if ($temp_override ->loaded()){ + $product_override = $temp_override; + //break; + } + } + } + + $products = ORM::factory("product")->find_all(); + foreach ($products as $product){ + $show = true; + $cost = $product->cost; + if ($product_override->loaded()){ + $show = !$product_override->none; + $item_product = ORM::factory("item_product") + ->where('product_override_id', "=", $product_override->id) + ->where('product_id', "=", $product->id)->find(); + + if ($item_product->loaded()){ + $cost = $item_product->cost; + if (!$show){ + $show = $item_product->include; + } + } + } + + if ($show) + { + $producta[$product->id] = html::clean($product->description)." (".basket::formatMoneyForWeb($cost).")"; + } + } + + return $producta; + } + + static function isForSale($id){ + + try + { + // check for product override + $product_override = ORM::factory("product_override")->where('item_id', "=", $id)->find(); + + if (!$product_override->loaded()){ + // no override found so check parents + // check parents for product override + $item = ORM::factory("item",$id); + + $parents = $item->parents(); + foreach ($parents as $parent){ + // check for product override + $temp_override = ORM::factory("product_override")->where('item_id', "=", $parent->id)->find(); + if ($temp_override ->loaded()){ + $product_override = $temp_override; + //break; + } + } + } + + $products = ORM::factory("product")->find_all(); + + if ($product_override->loaded() && $product_override->none){ + + foreach ($products as $product){ + + $item_product = ORM::factory("item_product") + ->where('product_override_id', "=", $product_override->id) + ->where('product_id', "=", $product->id)->find(); + + if ($item_product->loaded()){ + + if ($item_product->include){ + return true; + } + } + } + + return false; + + } else { + return count($products) > 0; + } + } + catch (Exception $e) + { + echo $e; + } + } +} \ No newline at end of file diff --git a/3.0/modules/basket_plus/images/basket.png b/3.0/modules/basket_plus/images/basket.png new file mode 100644 index 0000000000000000000000000000000000000000..168bef64c3830fc2e9ea9886a963fa9e6b6226f2 GIT binary patch literal 424 zcmV;Z0ayNsP)4B1{9e^0{F3;`2g3(fCw{Qk!u4?6EHMOT4~P{!Bj4w z9ZRV@Cw>DKc&O0#&$I!;RF$P_8f;BSDRr$Ku!v3Bsoa}v=_xFL4YI;dx&a+-K$1L4 z>S4P=Jr-~YASqT;vNeJ-bJI26BI2t-m;C!YjHY$Kr&nXy6P4d~iaw3p6)@%};Mv^( zs1elN0j?)y`Af?Y?tqOOF5qZDyaOadd_field('business', 'somebody@domain.com'); + * $p->add_field('first_name', $_POST['first_name']); + * ... (add all your fields in the same manor) + * $p->submit_paypal_post(); + * + * To process an IPN, have your IPN processing file contain: + * + * $p = new paypal_class; + * if ($p->validate_ipn()) { + * ... (IPN is verified. Details are in the ipn_data() array) + * } + * + * + * In case you are new to paypal, here is some information to help you: + * + * 1. Download and read the Merchant User Manual and Integration Guide from + * http://www.paypal.com/en_US/pdf/integration_guide.pdf. This gives + * you all the information you need including the fields you can pass to + * paypal (using add_field() with this class) aswell as all the fields + * that are returned in an IPN post (stored in the ipn_data() array in + * this class). It also diagrams the entire transaction process. + * + * 2. Create a "sandbox" account for a buyer and a seller. This is just + * a test account(s) that allow you to test your site from both the + * seller and buyer perspective. The instructions for this is available + * at https://developer.paypal.com/ as well as a great forum where you + * can ask all your paypal integration questions. Make sure you follow + * all the directions in setting up a sandbox test environment, including + * the addition of fake bank accounts and credit cards. + * + ******************************************************************************* + */ + +class Paypal_Core { + + var $last_error; // holds the last error encountered + + var $ipn_response; // holds the IPN response from paypal + public $ipn_data = array(); // array contains the POST values for IPN + + var $fields = array(); // array holds the fields to submit to paypal + + + public function __construct() + { + // initialization constructor. Called when class is created. + + // sandbox paypal + + //$this->paypal_url = "https://www.sandbox.paypal.com/cgi-bin/webscr"; + //$this->secure_url = "ssl://www.sandbox.paypal.com"; + + // normal paypal + $this->paypal_url = "https://www.paypal.com/cgi-bin/webscr"; + $this->secure_url = "ssl://www.paypal.com"; + + $this->last_error = ''; + + //$this->ipn_log_file = Kohana::log_directory().Kohana::config('paypal.ipn_logfile'); + //$this->ipn_log = true; + $this->ipn_response = ''; + + // populate $fields array with a few default values. See the paypal + // documentation for a list of fields and their data types. These defaul + // values can be overwritten by the calling script. + + + } + + function add_field($field, $value) { + + // adds a key=>value pair to the fields array, which is what will be + // sent to paypal as POST variables. If the value is already in the + // array, it will be overwritten. + + $this->fields["$field"] = $value; + } + + public function process($session_basket, $return_url, $cancel_url, $notify_url){ + + $this->add_field('rm','2'); + $this->add_field('cmd','_cart'); + $this->add_field('upload','1'); + + $this->add_field('currency_code', basket::getCurrency()); + $this->add_field('business', basket::getPaypalAccount()); + + // IPN stuff + $this->add_field('return', $return_url); + $this->add_field('cancel_return', $cancel_url); + $this->add_field('notify_url', $notify_url); + + // postage + if ($session_basket->ispp()){ + $postage = $session_basket->postage_cost(); + if ($postage > 0) { + $this->add_field('shipping_1',$postage); + } + } + + // basket contents + $id = 1; + foreach ($session_basket->contents as $key => $basket_item){ + $this->add_field("item_name_$id", $basket_item->getCode()); + $this->add_field("amount_$id", $basket_item->cost_per); + $this->add_field("quantity_$id",$basket_item->quantity); + $id++; + } + + // shipping address + $this->add_field("payer_email", $session_basket->email); + $this->add_field("address_name", $session_basket->name); + $this->add_field("address_street", $session_basket->house." ".$session_basket->street); + $this->add_field("address_city", $session_basket->town); + $this->add_field("address_zip", $session_basket->postcode); + $this->add_field("contact_phone", $session_basket->phone); + + $string = "
paypal_url."\">\n"; + + foreach ($this->fields as $name => $value) { + $string = $string."\n"; + } + + $string = $string."
"; + return $string; + } + + function validate_ipn($key) { + + // parse the paypal URL + $url_parsed=parse_url($this->paypal_url); + + // generate the post string from the _POST vars aswell as load the + // _POST vars into an arry so we can play with them from the calling + // script. + $post_string = 'cmd=_notify-validate'; + foreach ($_POST as $field=>$value) { + $this->ipn_data["$field"] = $value; + $value = urlencode(stripslashes($value)); + $value = preg_replace('/(.*[^%^0^D])(%0A)(.*)/i','${1}%0D%0A${3}',$value); + $post_string .= '&'.$field.'='.$value; + } + + // open the connection to paypal + + $fp = fsockopen($this->secure_url,443,$err_num,$err_str,30); + if(!$fp) { + + // could not open the connection. If loggin is on, the error message + // will be in the log. + $this->last_error = "fsockopen error no. $errnum: $errstr"; + $this->log_ipn_results($key,false); + return false; + + } else { + + // Post the data back to paypal + fputs($fp, "POST ".$url_parsed['path']." HTTP/1.1\r\n"); + fputs($fp, "Host: ".$url_parsed['host']."\r\n"); + fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n"); + + fputs($fp, "Content-length: ".strlen($post_string)."\r\n\r\n"); + //fputs($fp, "Connection: close\r\n\r\n"); + fputs($fp, $post_string . "\r\n\r\n"); + + // loop through the response from the server and append to variable + while(!feof($fp)) { + $this->ipn_response .= fgets($fp, 1024); + } + + fclose($fp); // close connection + + } + + if (stristr($this->ipn_response,"VERIFIED")===false) + { + // Invalid IPN transaction. Check the log for details. + $this->last_error = 'IPN Validation Failed. '.$url_parsed['host'].'\\'.$url_parsed['path']; + $this->log_ipn_results($key,false); + return false; + } + else{ + + // Valid IPN transaction. + + // check recievers e-mail + $business = basket::getPaypalAccount(); + + if ($this->ipn_data['receiver_email']!=$business) + { + $this->last_error = 'receivers e-mail did not match '.$business; + $this->log_ipn_results($key,false); + return false; + } + + // if confirmed check message has not been received already + if ($this->ipn_data['payment_status'] == "Completed"){ + + $message = ORM::factory("ipn_message") + ->where('key',"=",$key) + ->where('status',"=",'completed') + ->where('txn_id',"=",$this->ipn_data['txn_id'])->find(); + + if ($message->loaded()){ + $this->last_error = 'Message alread received.'; + $this->log_ipn_results($key,false); + return false; + } + } + + $this->log_ipn_results($key,true); + return true; + + } + + } + + function log_ipn_results($key, $success) { + + // Timestamp + $text = '['.date('m/d/Y g:i A').'] - '; + + $message = ORM::factory("ipn_message"); + $message->date = time(); + $message->key = $key; + $message->txn_id = $this->ipn_data['txn_id']; + $message->status = $this->ipn_data['payment_status']; + $message->success = $success; + + // Success or failure being logged? + if ($success) $text .= "SUCCESS!\n"; + else $text .= 'FAIL: '.$this->last_error."\n"; + + // Log the POST variables + $text .= "IPN POST Vars from Paypal:\n"; + foreach ($this->ipn_data as $key=>$value) { + $text .= "$key=$value \n"; + } + + // Log the response from the paypal server + $text .= "\nIPN Response from Paypal Server:\n ".$this->ipn_response; + + $message->text = $text; + $message->save(); + } + + function dump_fields() { + + // Used for debugging, this function will output all the field/value pairs + // that are currently defined in the instance of the class using the + // add_field() function. + + echo "

paypal_class->dump_fields() Output:

"; + echo " + + + + "; + + ksort($this->fields); + foreach ($this->fields as $key => $value) { + echo ""; + } + + echo "
Field NameValue
$key".urldecode($value)." 

"; + } +} + + + diff --git a/3.0/modules/basket_plus/libraries/Session_Basket.php b/3.0/modules/basket_plus/libraries/Session_Basket.php new file mode 100644 index 00000000..8186d911 --- /dev/null +++ b/3.0/modules/basket_plus/libraries/Session_Basket.php @@ -0,0 +1,216 @@ +product = $aProduct; + $this->item = $aItem; + $this->quantity = $aQuantity; + $this->calculate_cost(); + } + + private function calculate_cost(){ + $prod = ORM::factory("product", $this->product); + $this->cost = $prod->cost * $this->quantity; + $this->cost_per = $prod->cost; + } +// PUBLIC FUNCTIONS + public function add($quantity){ + $this->quantity += $quantity; + $this->calculate_cost(); + } + + public function size(){ + return $this->quantity; + } + + public function getItem(){ + $photo = ORM::factory("item", $this->item); + return $photo; + } + + public function product_description(){ + $prod = ORM::factory("product", $this->product); + return $prod->description; + } +/* added for basket sidebar labels */ + public function product_name(){ + $prod = ORM::factory("product", $this->product); + return $prod->name; + } + + public function getProduct(){ + $prod = ORM::factory("product", $this->product); + return $prod; + } + + public function getCode(){ + $photo = ORM::factory("item", $this->item); + $prod = ORM::factory("product", $this->product); + return $photo->id." - ".$photo->title." - ".$prod->name; + } +} + +class Session_Basket_Core { + + public $contents = array(); + +// added for customer record + public $title = ""; + public $initials = ""; + public $insertion = ""; + + public $name = ""; + public $house = ""; + public $street = ""; + public $suburb = ""; + public $town = ""; + public $postcode = ""; + public $email = ""; + public $phone = ""; +// added for user comment + public $comments = ""; +// added for reference with pickup + public $childname = ""; + public $childgroup = ""; +// added for agreement to General Terms + public $agreeterms = ""; + + public $ppenabled = true; + +//clear the basket + public function clear(){ + if (isset($this->contents)){ + foreach ($this->contents as $key => $item){ + unset($this->contents[$key]); + } + } + $this->ppenabled = true; + } + +//enable/disble pack&post + public function enablepp(){ + $this->ppenabled = true; + } + + public function disablepp(){ + $this->ppenabled = false; + } + +//get pack&post choice + public function ispp(){ + return $this->ppenabled; + } + + private function create_key($product, $id){ + return "$product _ $id"; + } + +//get size + public function size(){ + $size = 0; + if (isset($this->contents)){ + foreach ($this->contents as $product => $basket_item){ + $size += $basket_item->size(); + } + } + return $size; + } + + // to add an item to the basket + public function add($id, $product, $quantity){ + $key = $this->create_key($product, $id); + // add more of a product already in the basket + if (isset($this->contents[$key])){ + $this->contents[$key]->add($quantity); + } + // new product in the basket + else { + $this->contents[$key] = new basket_item($product, $id, $quantity); + } + } + + // to remove an item from the basket + public function remove($key){ + unset($this->contents[$key]); + } + + //calculate total postage cost + public function postage_cost(){ + $postage_cost = 0; + $postage_bands = array(); + $postage_quantities = array(); + if (isset($this->contents)){ + // create array of postage bands + foreach ($this->contents as $product => $basket_item){ + $postage_band = $basket_item->getProduct()->postage_band; + if (isset($postage_bands[$postage_band->id])){ + $postage_quantities[$postage_band->id] += $basket_item->quantity; + } + else{ + $postage_quantities[$postage_band->id] = $basket_item->quantity; + $postage_bands[$postage_band->id] = $postage_band; + } + } + + foreach ($postage_bands as $id => $postage_band){ + $postage_cost += $postage_band->flat_rate + ($postage_band->per_item * $postage_quantities[$id]); + } + } + return $postage_cost; + } + + //calculate total basket cost + public function cost(){ + $cost = 0; + if (isset($this->contents)){ + foreach ($this->contents as $product => $basket_item){ + $cost += $basket_item->cost; + } + } + return $cost; + } + + //return the basket of the session + public static function get(){ + return Session::instance()->get("basket"); + } + + public static function getOrCreate(){ + $session = Session::instance(); + + $basket = $session->get("basket"); + if (!$basket){ + $basket = new Session_Basket(); + $session->set("basket", $basket); + } + return $basket; + } +} \ No newline at end of file diff --git a/3.0/modules/basket_plus/models/customer.php b/3.0/modules/basket_plus/models/customer.php new file mode 100644 index 00000000..1586b305 --- /dev/null +++ b/3.0/modules/basket_plus/models/customer.php @@ -0,0 +1,22 @@ +date); + } + + public function json_encode(){ + $toReturn = array( + 'id' => $this->id, + 'date' => $this->formatedTime(), + 'text' => text::convertText($this->text)); + return $toReturn; + } +} \ No newline at end of file diff --git a/3.0/modules/basket_plus/models/item_product.php b/3.0/modules/basket_plus/models/item_product.php new file mode 100644 index 00000000..0749e242 --- /dev/null +++ b/3.0/modules/basket_plus/models/item_product.php @@ -0,0 +1,22 @@ +id." ".$this->name." ".$this->status(); + } + + public function status(){ + switch ($this->status){ + case Order_Model::WAITING_PAYMENT: + //return "Waiting Payment"; + return "Wacht op betaling"; + case Order_Model::PAYMENT_CONFIRMED: + //return "Payment Confirmed"; + return "Betaling bevestigd"; +//@TODO add completed+delivery method + case Order_Model::DELIVERED_NOTPAID: + //return "Delivered,w/o payment"; + return "Afgeleverd zonder betaling"; + case Order_Model::DELIVERED: + //return "Complete"; + return "Afgehandeld"; + case Order_Model::EXPIRED: + //return "Expired"; + return "Verlopen"; + case Order_Model::CANCELLED: + //return "Cancelled"; + return "Geannuleerd"; + + default: + //return "Unknown"; + return "Onbekend"; + } + } + + public function payment_method(){ + switch ($this->method){ + case 1: + //return "through Paypal"; + return "Via PayPal"; + case 2: + //return "offline"; + return "Overmaking - versturen per post"; + case 3: + //return "offline"; + return "Overmaking - versturen per e-mail"; + case 4: + //return "offline"; + return "Overmaking - afhalen"; + + default: + //return "Unknown"; + return "Onbekend"; + } + } +} diff --git a/3.0/modules/basket_plus/models/order_log.php b/3.0/modules/basket_plus/models/order_log.php new file mode 100644 index 00000000..9a94d77e --- /dev/null +++ b/3.0/modules/basket_plus/models/order_log.php @@ -0,0 +1,84 @@ +status){ + case 1: + //return "Waiting Payment"; + return "Wacht op betaling"; + case 2: + //return "Payment Confirmed"; + return "Betaling bevestigd"; + case 3: + //return "Late Payment"; + return "Betalingsherinnering verstuurd"; + case 10: + //return "Delivered,w/o payment"; + return "Afgeleverd zonder betaling"; + case 20: + //return "Complete"; + return "Afgehandeld"; + case 21: + //return "Expired"; + return "Verlopen"; + case 99: + //return "Cancelled"; + return "Geannuleerd"; + + default: + //return "Unknown"; + return "Onbekend"; + } + } + + public function event(){ + switch ($this->event){ + case 1: + //return "Waiting Payment"; + return "Bestelling geplaatst"; + case 2: + //return "Payment Confirmed"; + return "Betaling ontvangen"; + case 3: + //return "Late Payment"; + return "Betalingsherinnering verstuurd"; + case 9: + //return "Order Copy"; + return "Kopie bestelling verstuurd"; + case 10: + //return "Delivered,w/o payment"; + return "Bestelling afgeleverd zonder betaling"; + case 20: + //return "Complete"; + return "Bestelling verzonden"; + case 21: + //return "Expired"; + return "Bestelling verlopen"; + case 99: + //return "Cancelled"; + return "Bestelling geannuleerd"; + + default: + //return "Unknown"; + return "Onbekend"; + } + } +} diff --git a/3.0/modules/basket_plus/models/order_update.php b/3.0/modules/basket_plus/models/order_update.php new file mode 100644 index 00000000..636056a8 --- /dev/null +++ b/3.0/modules/basket_plus/models/order_update.php @@ -0,0 +1,25 @@ + "length[1,32]"); + + protected $has_many=array('products'); + +} diff --git a/3.0/modules/basket_plus/models/product.php b/3.0/modules/basket_plus/models/product.php new file mode 100644 index 00000000..5408e012 --- /dev/null +++ b/3.0/modules/basket_plus/models/product.php @@ -0,0 +1,26 @@ + "length[1,32]", + "description" => "length[0,255]"); + protected $belongs_to=array('postage_band'); + +} diff --git a/3.0/modules/basket_plus/models/product_override.php b/3.0/modules/basket_plus/models/product_override.php new file mode 100644 index 00000000..7602fc89 --- /dev/null +++ b/3.0/modules/basket_plus/models/product_override.php @@ -0,0 +1,22 @@ + + \ No newline at end of file diff --git a/3.0/modules/basket_plus/views/add_to_basket_ajax.html.php b/3.0/modules/basket_plus/views/add_to_basket_ajax.html.php new file mode 100644 index 00000000..0e3b2d2e --- /dev/null +++ b/3.0/modules/basket_plus/views/add_to_basket_ajax.html.php @@ -0,0 +1,11 @@ + +
+
+ <?= $item->title?> +
+Kies het afdrukformaat en aantal afdrukken +
+Kies het gewenste fotoformaat en het aantal foto's */ ?> + +
+
\ No newline at end of file diff --git a/3.0/modules/basket_plus/views/admin_configure.html.php b/3.0/modules/basket_plus/views/admin_configure.html.php new file mode 100644 index 00000000..2c3cf5c1 --- /dev/null +++ b/3.0/modules/basket_plus/views/admin_configure.html.php @@ -0,0 +1,7 @@ + +
+

+

+

+ +
\ No newline at end of file diff --git a/3.0/modules/basket_plus/views/admin_postage_bands.html.php b/3.0/modules/basket_plus/views/admin_postage_bands.html.php new file mode 100644 index 00000000..42bf3a4e --- /dev/null +++ b/3.0/modules/basket_plus/views/admin_postage_bands.html.php @@ -0,0 +1,71 @@ + + \ No newline at end of file diff --git a/3.0/modules/basket_plus/views/admin_product_lines.html.php b/3.0/modules/basket_plus/views/admin_product_lines.html.php new file mode 100644 index 00000000..654fe258 --- /dev/null +++ b/3.0/modules/basket_plus/views/admin_product_lines.html.php @@ -0,0 +1,60 @@ + + \ No newline at end of file diff --git a/3.0/modules/basket_plus/views/admin_templates.html.php b/3.0/modules/basket_plus/views/admin_templates.html.php new file mode 100644 index 00000000..b7ce5183 --- /dev/null +++ b/3.0/modules/basket_plus/views/admin_templates.html.php @@ -0,0 +1,8 @@ + +
+

+

+ +

+ +
\ No newline at end of file diff --git a/3.0/modules/basket_plus/views/basket-side-bar.html.php b/3.0/modules/basket_plus/views/basket-side-bar.html.php new file mode 100644 index 00000000..912f2833 --- /dev/null +++ b/3.0/modules/basket_plus/views/basket-side-bar.html.php @@ -0,0 +1,62 @@ +page_type != 'basket'){ + if (basket::can_view_orders()){ + ?>" title=""> + item(); + + if ($item->is_photo() && product::isForSale($theme->item()->id)){ + ?>

+ id") ?>" + title="">

+ contents) && ($basket->size() > 0)) { + ?> +
+

" title=""> +

+ + +page_type != 'basket'): ?> + + " + title="">View Orders + + contents) && ($basket->size() > 0)): ?> + + + diff --git a/3.0/modules/basket_plus/views/checkout.html.php b/3.0/modules/basket_plus/views/checkout.html.php new file mode 100644 index 00000000..77937631 --- /dev/null +++ b/3.0/modules/basket_plus/views/checkout.html.php @@ -0,0 +1,167 @@ + + + +
+

+
+ $webshop));?> + + +
+

+ +
+ + + +
+
+ + + + + + + postage_cost();?> + ispp() && $postage > 0):?> + + + 0):?> + + + + + + +
+
+
diff --git a/3.0/modules/basket_plus/views/confirm_order.html.php b/3.0/modules/basket_plus/views/confirm_order.html.php new file mode 100644 index 00000000..057a74d3 --- /dev/null +++ b/3.0/modules/basket_plus/views/confirm_order.html.php @@ -0,0 +1,152 @@ + + + + +
+

+
+ + + + + + + + + contents as $key => $prod_details): ?> + "> + + + + + + + + postage_cost();?> + 0):?> + "> + + + + + + + + "> + + + + + + + */ ?> + +
+ getItem(); ?> + width; /* added JtK */?> +
+ + <?= $item->title?>
+				<? if ($width < module::get_var( + style="width=30px;"/> + + style="width=45px;"/> + +
+
+ getItem(); ?> +
+ title) ?> +
+
product_description()) ?>quantity) ?>cost) ?>
ispp()?"":"style=\"text-decoration:line-through\""; ?>>">
ispp()?basket::formatMoneyForWeb($basket->cost() + $postage):basket::formatMoneyForWeb($basket->cost()); ?>Total Costispp()?basket::formatMoneyForWeb($basket->cost() + $postage):basket::formatMoneyForWeb($basket->cost()); ?>
+
+ + + + + +
+ street <> ""):?> +

+ +

+ +
+ street <> ""):?> + street ?> house ?>
+ postcode ?> town ?>
+ +
+ email ?>
+ phone <> ""):?> + phone ?>
+ +
+ postage_cost(); + $ppon = $basket->ispp();?> +   + 0)):?> +
+ 0):?> + +
+ +
+ +
+ +
+ childname <> ""):?> +
+  childname ?>
+  childgroup ?>
+ + comments <> ""):?> +
+ comments ?> +
+ +
+ +
+ + + + + + " class="left g-button ui-state-default ui-corner-all ui-icon-left"> + + */?> + + +
+
diff --git a/3.0/modules/basket_plus/views/order_complete.html.php b/3.0/modules/basket_plus/views/order_complete.html.php new file mode 100644 index 00000000..16f42fd1 --- /dev/null +++ b/3.0/modules/basket_plus/views/order_complete.html.php @@ -0,0 +1,27 @@ + + */?> +
+
+

Bestelling geplaatst (stap 3 van 3)

+ +
+
\ No newline at end of file diff --git a/3.0/modules/basket_plus/views/paypal_redirect.html.php b/3.0/modules/basket_plus/views/paypal_redirect.html.php new file mode 100644 index 00000000..c40ff144 --- /dev/null +++ b/3.0/modules/basket_plus/views/paypal_redirect.html.php @@ -0,0 +1,4 @@ + +

Processing

If you are not automatically redirected to + paypal within 5 seconds Click Here.

+ diff --git a/3.0/modules/basket_plus/views/pew1.html.php b/3.0/modules/basket_plus/views/pew1.html.php new file mode 100644 index 00000000..e787e604 --- /dev/null +++ b/3.0/modules/basket_plus/views/pew1.html.php @@ -0,0 +1,16 @@ + + \ No newline at end of file diff --git a/3.0/modules/basket_plus/views/pew2.html.php b/3.0/modules/basket_plus/views/pew2.html.php new file mode 100644 index 00000000..3feb0d27 --- /dev/null +++ b/3.0/modules/basket_plus/views/pew2.html.php @@ -0,0 +1,17 @@ + + \ No newline at end of file diff --git a/3.0/modules/basket_plus/views/print_order.html.php b/3.0/modules/basket_plus/views/print_order.html.php new file mode 100644 index 00000000..d366c892 --- /dev/null +++ b/3.0/modules/basket_plus/views/print_order.html.php @@ -0,0 +1,20 @@ + + + +Print Order + + + + + + + + + + + \ No newline at end of file diff --git a/3.0/modules/basket_plus/views/view_basket.html.php b/3.0/modules/basket_plus/views/view_basket.html.php new file mode 100644 index 00000000..35cfc5ec --- /dev/null +++ b/3.0/modules/basket_plus/views/view_basket.html.php @@ -0,0 +1,145 @@ + + +
+

+
+ contents ) && count($basket->contents) > 0): ?> + + +
+
+ contents ) && count($basket->contents) > 0): ?> + + + + + + + + + + + contents as $key => $prod_details): ?> + "> + + + + + + + + + postage_cost();?> + 0):?> + "> + + + + + + + + + "> + + ' JtK */?> + + + + + 0):?> + + + + + + +
+ getItem(); ?> + width; /* added JtK */?> +
+ + <?= $item->title?>
+                <? if ($width < module::get_var( + style="width=60px;"/> + + style="width=90px;"/> + +
+
product_description()) ?>quantity) ?>cost /* added 'align=right' JtK */?> + cost); ?>" + class="g-button2 ui-state-default ui-corner-all ui-icon-left"> + "> +
ispp()?"":"style=\"text-decoration:line-through\""; ?>>">
' JtK */?>ispp()?basket::formatMoneyForWeb($total + $postage):basket::formatMoneyForWeb($total)?>
ispp()?"":"checked"; ?>/>
+ + + +
+ +
+ contents ) && count($basket->contents) > 0): ?> + + + + + + " + class="right g-button ui-state-default ui-corner-all ui-icon-right"> + + +
+
\ No newline at end of file diff --git a/3.0/modules/basket_plus/views/view_ipn.html.php b/3.0/modules/basket_plus/views/view_ipn.html.php new file mode 100644 index 00000000..11945fba --- /dev/null +++ b/3.0/modules/basket_plus/views/view_ipn.html.php @@ -0,0 +1,46 @@ + +

IPN Messages for title()?>

+">Back to orders +
+ + +
+

+
+ diff --git a/3.0/modules/basket_plus/views/view_order.html.php b/3.0/modules/basket_plus/views/view_order.html.php new file mode 100644 index 00000000..8ab83034 --- /dev/null +++ b/3.0/modules/basket_plus/views/view_order.html.php @@ -0,0 +1,36 @@ + +

title()?>

+ +Betaal- en verzendwijze: payment_method()?>
+",$order->text);?> \ No newline at end of file diff --git a/3.0/modules/basket_plus/views/view_order_logs.html.php b/3.0/modules/basket_plus/views/view_order_logs.html.php new file mode 100644 index 00000000..cb332c70 --- /dev/null +++ b/3.0/modules/basket_plus/views/view_order_logs.html.php @@ -0,0 +1,42 @@ + +
+

+ + + + + + + + $order_log){ + ?> + + + + + + + +
BestelnummerBestelstatusGebeurtenisDatum/tijd
id?>status()?>event()?>timestamp)?>
+
diff --git a/3.0/modules/basket_plus/views/view_orders.html.php b/3.0/modules/basket_plus/views/view_orders.html.php new file mode 100644 index 00000000..8c24d91f --- /dev/null +++ b/3.0/modules/basket_plus/views/view_orders.html.php @@ -0,0 +1,128 @@ + +
+
+ + + + + + + +
+
+
+ + + + + + + + + $order){ + ?> + + + + id;?> + status?>">id?> + + + */?> + + + + + cost; + } + ?> + + + + + + + +
BestelnummerNaamBestelstatusVerzendingBedrag
id?>name?>">status()?>status()?>status()?>payment_method()?>cost)?>
Totaal
+
+

+
+ + From 36d84001a25ec568727acd3549f67d3fe809f806 Mon Sep 17 00:00:00 2001 From: Jeroen ten kate Date: Thu, 27 Dec 2012 21:31:27 +0100 Subject: [PATCH 2/3] Minor cleanup (whitespace, comments) --- .../basket_plus/controllers/basket.php | 85 +++++++++---------- 3.0/modules/basket_plus/helpers/basket.php | 52 ++++++------ .../basket_plus/helpers/basket_installer.php | 2 +- 3.0/modules/basket_plus/models/order.php | 2 - 4 files changed, 69 insertions(+), 72 deletions(-) diff --git a/3.0/modules/basket_plus/controllers/basket.php b/3.0/modules/basket_plus/controllers/basket.php index 004827ee..4e204da1 100644 --- a/3.0/modules/basket_plus/controllers/basket.php +++ b/3.0/modules/basket_plus/controllers/basket.php @@ -187,8 +187,8 @@ class Basket_Controller extends Controller { if ($order->loaded()){ //Send order copy - basket::send_invoice_copy($order); - order_log::log($order,order_log::COPY_SENT); + basket::send_invoice_copy($order); + order_log::log($order,order_log::COPY_SENT); } url::redirect("basket/view_orders"); } @@ -202,16 +202,16 @@ class Basket_Controller extends Controller { if ($order->status == 1) { $order->status = 2; - order_log::log($order,order_log::PAID); + order_log::log($order,order_log::PAID); } elseif ($order->status == 10) { $order->status = 20; - order_log::log($order,order_log::PAID); + order_log::log($order,order_log::PAID); } $order->save(); //Send payment confirmation - basket::send_payment_confirmation($order); + basket::send_payment_confirmation($order); } url::redirect("basket/view_orders"); } @@ -282,38 +282,38 @@ class Basket_Controller extends Controller { private function getCheckoutForm(){ - $basket = Session_Basket::get(); - $ppon = $basket->ispp(); - $postage = $basket->postage_cost(); + $basket = Session_Basket::get(); + $ppon = $basket->ispp(); + $postage = $basket->postage_cost(); //labels for fields - $input1_lbl=t("Title"); - $input2_lbl=t("Initials/First name")."*"; - $input3_lbl=t("Insertion"); - $input4_lbl=t("Name")."*"; - $input5_lbl=t("Street"); - $input6_lbl=t("House Number / Name"); - $input7_lbl=t("Suburb"); - $input8_lbl=t("Postcode"); - $input9_lbl=t("Town or City"); - $input10_lbl=t("E-mail Address")."*"; - $input11_lbl=t("Telephone Number")."*"; - $input12_lbl=t("Child's Name"); - $input13_lbl=t("Child's Group"); - $input14_lbl=t("Additional comments"); - $input15_lbl=t("I agree with the General Terms")."*"; + $input1_lbl=t("Title"); + $input2_lbl=t("Initials/First name")."*"; + $input3_lbl=t("Insertion"); + $input4_lbl=t("Name")."*"; + $input5_lbl=t("Street"); + $input6_lbl=t("House Number / Name"); + $input7_lbl=t("Suburb"); + $input8_lbl=t("Postcode"); + $input9_lbl=t("Town or City"); + $input10_lbl=t("E-mail Address")."*"; + $input11_lbl=t("Telephone Number")."*"; + $input12_lbl=t("Child's Name"); + $input13_lbl=t("Child's Group"); + $input14_lbl=t("Additional comments"); + $input15_lbl=t("I agree with the General Terms")."*"; //labels for mandatory fields with p&p if (($ppon) && ($postage > 0)){ - $input5_lbl=$input5_lbl."*"; - $input6_lbl=$input6_lbl."*"; - $input8_lbl=$input8_lbl."*"; - $input9_lbl=$input9_lbl."*"; + $input5_lbl=$input5_lbl."*"; + $input6_lbl=$input6_lbl."*"; + $input8_lbl=$input8_lbl."*"; + $input9_lbl=$input9_lbl."*"; } //labels for mandatory fields with pickup - elseif ($postage > 0){ - $input12_lbl=$input12_lbl."*"; - $input13_lbl=$input13_lbl."*"; - } + elseif ($postage > 0){ + $input12_lbl=$input12_lbl."*"; + $input13_lbl=$input13_lbl."*"; + } $form = new Forge("basket/confirm", "", "post", array("id" => "checkout", "name" =>"checkout")); $group = $form->group("contact")->label(t("Contact Details")); $group->input("title")->label($input1_lbl)->id("title"); @@ -329,14 +329,14 @@ class Basket_Controller extends Controller { $group->input("phone")->label($input11_lbl)->id("phone"); //show child fields only with pickup DISABLED if ((!$ppon) && ($postage > 1000)){ - $group->input("childname")->label($input12_lbl)->id("childname"); - $group->input("childgroup")->label($input13_lbl)->id("childgroup"); + $group->input("childname")->label($input12_lbl)->id("childname"); + $group->input("childgroup")->label($input13_lbl)->id("childgroup"); } - else{ - $group->hidden("childname")->label($input12_lbl)->id("childname"); - $group->hidden("childgroup")->label($input13_lbl)->id("childgroup"); + else{ + $group->hidden("childname")->label($input12_lbl)->id("childname"); + $group->hidden("childgroup")->label($input13_lbl)->id("childgroup"); } - $group->input("comments")->label($input14_lbl)->id("comments"); + $group->input("comments")->label($input14_lbl)->id("comments"); $group->checkbox("agreeterms")->label($input15_lbl)->id("agreeterms"); $group->hidden("paypal")->id("paypal"); @@ -402,8 +402,8 @@ class Basket_Controller extends Controller { $basket->suburb = $form->contact->suburb->value; $basket->email = $form->contact->email->value; $basket->phone = $form->contact->phone->value; - $basket->childname = $form->contact->childname->value; - $basket->childgroup = $form->contact->childgroup->value; + $basket->childname = $form->contact->childname->value; + $basket->childgroup = $form->contact->childgroup->value; $basket->comments = $form->contact->comments->value; $basket->agreeterms=$form->contact->agreeterms->value; @@ -427,8 +427,8 @@ class Basket_Controller extends Controller { // redirect to paypal // NOT USED END =============================== - }else - { + } + else{ $form = new Forge("basket/complete", "", "post", array("id" => "confirm", "name" =>"confirm")); $view = new View("confirm_order.html"); $view->basket = $basket; @@ -437,8 +437,7 @@ class Basket_Controller extends Controller { print $template; } } - else - { + else{ die("Invalid confirmation!"); } } diff --git a/3.0/modules/basket_plus/helpers/basket.php b/3.0/modules/basket_plus/helpers/basket.php index e8abe6e7..606d0d3e 100644 --- a/3.0/modules/basket_plus/helpers/basket.php +++ b/3.0/modules/basket_plus/helpers/basket.php @@ -162,7 +162,7 @@ class basket_Core { $form->configure->paypal_account->value(basket::getPaypalAccount()); $form->configure->currency->selected(basket::getCurrency()); $form->configure->allow_pickup->checked(basket::isAllowPickup()); - $form->configure->pickup_location->value(basket::getPickupLocation()); + $form->configure->pickup_location->value(basket::getPickupLocation()); $form->configure->order_prefix->value(basket::getOrderPrefix()); $form->configure->order_bankaccount->value(basket::getOrderBankAccount()); $form->configure->order_accountowner->value(basket::getOrderAccountOwner()); @@ -197,7 +197,7 @@ class basket_Core { $paypal_account = $form->configure->paypal_account->value; $currency = $form->configure->currency->selected; $allow_pickup = $form->configure->allow_pickup->value; - $pickup_location = $form->configure->pickup_location->value; + $pickup_location = $form->configure->pickup_location->value; $order_prefix = $form->configure->order_prefix->value; $order_bankaccount = $form->configure->order_bankaccount->value; $order_accountowner = $form->configure->order_accountowner->value; @@ -291,12 +291,12 @@ class basket_Core { * Get pickup location from user profile unless it's empty. Then get it from the general settings. */ static function getPickupLocation(){ - $user = identity::active_user(); - $user_basket = ORM::factory("user_basket")->where("id", "=", $user->id)->find(); - $pickup_location = $user_basket->pickup_location; - if (($pickup_location == "") or ($pickup_location == null)) { - $pickup_location = module::get_var("basket","pickup_location");} - return $pickup_location; + $user = identity::active_user(); + $user_basket = ORM::factory("user_basket")->where("id", "=", $user->id)->find(); + $pickup_location = $user_basket->pickup_location; + if (($pickup_location == "") or ($pickup_location == null)) { + $pickup_location = module::get_var("basket","pickup_location");} + return $pickup_location; } static function getPaymentDetails(){ @@ -319,7 +319,7 @@ class basket_Core { return module::get_var("basket","allow_pickup"); } - static function getOrderCompletePage(){ + static function getOrderCompletePage(){ return module::get_var("basket","order_complete_page"); } @@ -333,6 +333,7 @@ class basket_Core { static function getOrderPaidEmail(){ return module::get_var("basket","order_paid_email"); } + static function getOrderPaidEmailSubject(){ return module::get_var("basket","order_paid_email_subject"); } @@ -405,16 +406,16 @@ class basket_Core { //Added 2011-10-02 static function replaceStringsAll($string, $order) { - $string_new = basket::replaceStrings($string,Array( - "name"=>$order->name, - "order_number"=> basket::getOrderPrefix().$order->id, - "total_cost" => basket::formatMoneyForMail($order->cost), - "order_details"=> $order->text, - "email"=>basket::getEmailAddress(), - "pickup_location"=> basket::getPickupLocation(), - "website"=> basket::getWebsite(), - "webshop"=> basket::getWebshop())); - return $string_new; + $string_new = basket::replaceStrings($string,Array( + "name"=>$order->name, + "order_number"=> basket::getOrderPrefix().$order->id, + "total_cost" => basket::formatMoneyForMail($order->cost), + "order_details"=> $order->text, + "email"=>basket::getEmailAddress(), + "pickup_location"=> basket::getPickupLocation(), + "website"=> basket::getWebsite(), + "webshop"=> basket::getWebshop())); + return $string_new; } //Added 2011-10-02 @@ -428,13 +429,13 @@ class basket_Core { //Added 2011-10-02 static function deliveryMethod($order) { -//@TODO: configurable delivery methods - if ($order->method == Order_Model::DELIVERY_MAIL) {$delivery_method = "verstuurd per post";} + //@TODO: configurable delivery methods + if ($order->method == Order_Model::DELIVERY_MAIL) {$delivery_method = "verstuurd per post";} elseif ($order->method == Order_Model::DELIVERY_EMAIL) {$delivery_method = "verstuurd per e-mail";} elseif ($order->method == Order_Model::DELIVERY_PICKUP) {$delivery_method = "klaargelegd om af te halen bij ".basket::getPickupLocation()."";} - else {$delivery_method = "GEEN LEVERINGSWIJZE BEKEND";} - return $delivery_method; -} + else {$delivery_method = "GEEN LEVERINGSWIJZE BEKEND";} + return $delivery_method; + } static function setWebshop($webshop){ module::set_var("basket","webshop",$webshop); @@ -542,7 +543,6 @@ class basket_Core { } static function createOrder($basket, $method){ - // fill customer record; added 2011-08-20 $customer = ORM::factory("customer"); $customer->title=$basket->title; @@ -697,7 +697,7 @@ Bestelde foto's:"; } public function send_invoice_copy($order){ - // order confirmation mail to customer + // copy of order confirmation mail to customer $to = $order->email; $from = "From: ".basket::getEmailAddress(); $subject = basket::replaceStringsAll(basket::getOrderCompleteEmailSubject(),$order); diff --git a/3.0/modules/basket_plus/helpers/basket_installer.php b/3.0/modules/basket_plus/helpers/basket_installer.php index a8e96b20..39a7f79c 100644 --- a/3.0/modules/basket_plus/helpers/basket_installer.php +++ b/3.0/modules/basket_plus/helpers/basket_installer.php @@ -61,7 +61,7 @@ class basket_installer $db->query("CREATE TABLE IF NOT EXISTS {orders} ( `id` int(9) NOT NULL auto_increment, `customerid` int(9) NOT NULL, - `status` int(9) DEFAULT 0, + `status` int(9) DEFAULT 0, `name` varchar(512), `email` varchar(256), `cost` DECIMAL(10,2) default 0, diff --git a/3.0/modules/basket_plus/models/order.php b/3.0/modules/basket_plus/models/order.php index f6295e15..c84e8fd0 100644 --- a/3.0/modules/basket_plus/models/order.php +++ b/3.0/modules/basket_plus/models/order.php @@ -73,10 +73,8 @@ class Order_Model extends ORM { //return "offline"; return "Overmaking - versturen per post"; case 3: - //return "offline"; return "Overmaking - versturen per e-mail"; case 4: - //return "offline"; return "Overmaking - afhalen"; default: From f1615490278d09e9e81afb45c258de84dd4a6d49 Mon Sep 17 00:00:00 2001 From: Jeroen ten kate Date: Thu, 27 Dec 2012 21:47:09 +0100 Subject: [PATCH 3/3] Minor cleanup (whitspace) --- .../basket_plus/views/checkout.html.php | 14 +-- .../basket_plus/views/confirm_order.html.php | 104 +++++++++--------- 2 files changed, 59 insertions(+), 59 deletions(-) diff --git a/3.0/modules/basket_plus/views/checkout.html.php b/3.0/modules/basket_plus/views/checkout.html.php index 77937631..f532a6e3 100644 --- a/3.0/modules/basket_plus/views/checkout.html.php +++ b/3.0/modules/basket_plus/views/checkout.html.php @@ -87,7 +87,7 @@ alert('Om te kunnen bestellen dient u akkoord te gaan met de Algemene voorwaarden.'); return false; } - if (!isHotmail(doc.email.value)){ + if (!isHotmail(doc.email.value)){ alert('Attentie: U heeft een e-mailadres van Hotmail opgegeven. Als u na het afronden van de bestelling geen bevestiging ontvangt, controleer dan de Junk-folder.'); } return true; @@ -95,17 +95,17 @@ //checkout with pickup function checkCheckout() { if (checkMandatory()){ - if (checkTerms()) { - document.checkout.submit(); - } + if (checkTerms()) { + document.checkout.submit(); + } } } //checkout with e-mail function checkCheckoutMail() { if (checkMandatory()){ - if (checkTerms()) { - document.checkout.submit(); - } + if (checkTerms()) { + document.checkout.submit(); + } } } //checkout with pack&post diff --git a/3.0/modules/basket_plus/views/confirm_order.html.php b/3.0/modules/basket_plus/views/confirm_order.html.php index 057a74d3..4cbbb891 100644 --- a/3.0/modules/basket_plus/views/confirm_order.html.php +++ b/3.0/modules/basket_plus/views/confirm_order.html.php @@ -38,19 +38,19 @@ contents as $key => $prod_details): ?> "> - - getItem(); ?> - width; /* added JtK */?> -
- - <?= $item->title?>
-				<? if ($width < module::get_var( - style="width=30px;"/> - - style="width=45px;"/> - -
- + + getItem(); ?> + width; /* added JtK */?> +
+ + <?= $item->title?>
+		  <? if ($width < module::get_var( + style="width=30px;"/> + + style="width=45px;"/> + +
+ getItem(); ?>
@@ -87,47 +87,47 @@
- street <> ""):?> -

- -

- -
- street <> ""):?> - street ?> house ?>
- postcode ?> town ?>
- -
- email ?>
- phone <> ""):?> - phone ?>
- -
- postage_cost(); - $ppon = $basket->ispp();?> -   - 0)):?> -
- 0):?> - -
- -
- -
- + street <> ""):?> +

+ +

+ +
+ street <> ""):?> + street ?> house ?>
+ postcode ?> town ?>
+ +
+ email ?>
+ phone <> ""):?> + phone ?>
+ +
+ postage_cost(); + $ppon = $basket->ispp();?> +   + 0)):?> +
+ 0):?> + +
+ +
+ +
+
- childname <> ""):?> -
-  childname ?>
-  childgroup ?>
- - comments <> ""):?> -
- comments ?> -
- + childname <> ""):?> +
+  childname ?>
+  childgroup ?>
+ + comments <> ""):?> +
+ comments ?> +
+