U kunt betalen via overmaking op de bankrekening van %webshop.
+Instructies vindt u in de bevestingsmail van de bestelling.
+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 00000000..168bef64 Binary files /dev/null and b/3.0/modules/basket_plus/images/basket.png differ diff --git a/3.0/modules/basket_plus/libraries/Paypal.php b/3.0/modules/basket_plus/libraries/Paypal.php new file mode 100644 index 00000000..6432205f --- /dev/null +++ b/3.0/modules/basket_plus/libraries/Paypal.php @@ -0,0 +1,330 @@ +add_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 = ""; + 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 "Field Name | +Value | +
$key | ".urldecode($value)." |
= t("Use this page to configure the shopping basket. If you have paypal you can use this to processs the final payments.") ?> +
+= $form ?> += t("Name") ?> | += t("Flat Rate") ?> | += t("Per Item") ?> | += t("Actions") ?> | + +
---|---|---|---|
+ = html::clean($postage_band->name) ?> + | ++ = basket::formatMoneyForWeb($postage_band->flat_rate) ?> + | ++ = basket::formatMoneyForWeb($postage_band->per_item) ?> + | ++ id") ?>" + open_text="= t("close") ?>" + class="g-panel-link g-button ui-state-default ui-corner-all ui-icon-left"> + = t("edit") ?> + + id") ?>" + class="g-dialog-link g-button ui-state-default ui-corner-all ui-icon-left"> + = t("delete") ?> + + | + +
= t("Name") ?> | += t("Cost") ?> | += t("Description") ?> | += t("Postage Band") ?> | += t("Actions") ?> | +
---|---|---|---|---|
+ = html::clean($product->name) ?> | += basket::formatMoneyForWeb($product->cost) ?> | += html::clean($product->description) ?> | += html::clean($product->postage_band->name) ?> | +id") ?>" + open_text="= t("close") ?>" + class="g-panel-link g-button ui-state-default ui-corner-all ui-icon-left"> + = t("edit") ?> + id") ?>" + class="g-dialog-link g-button ui-state-default ui-corner-all ui-icon-left"> + = t("delete") ?> + | +
+ = t("The following can be edited to control what the user see during offline payment. Please read the documentation for more information about variables you can use in the templates") ?> +
+ = $form ?> ++ id") ?>" + title="= t("Add To Basket")?>">= t("Add To Basket") ?>
+ + } + + if (isset($basket) && isset($basket->contents) && ($basket->size() > 0)) { + ?> +" title="= t("Checkout") ?>"> + = t("Checkout") ?>
+ } + else {?> + + } +} diff --git a/3.0/modules/basket_plus/views/basket.html.php b/3.0/modules/basket_plus/views/basket.html.php new file mode 100644 index 00000000..e0c5ab00 --- /dev/null +++ b/3.0/modules/basket_plus/views/basket.html.php @@ -0,0 +1,35 @@ + + + if ($theme->page_type != 'basket'): ?> + if (basket::can_view_orders()): ?> + " + title="= t("View Orders") ?>">View Orders + endif?> + if (isset($basket) && isset($basket->contents) && ($basket->size() > 0)): ?> + + endif ?> + endif ?> 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 @@ + + + ++ | = t("Photo") ?> | += t("Product") ?> | += t("Quantity") ?> | += t("Cost") ?> | +||||
---|---|---|---|---|---|---|---|---|
+ $item = $prod_details->getItem(); ?>
+ $width = $item->width; /* added JtK */?>
+
+
+
+ style="width=30px;"/>
+ else: ?>
+ style="width=45px;"/>
+ endif; ?>
+
+ |
+
+ $item = $prod_details->getItem(); ?>
+
+ = html::clean($item->title) ?>
+
+ |
+ = html::clean($prod_details->product_description()) ?> | += html::clean($prod_details->quantity) ?> | += basket::formatMoneyForWeb($prod_details->cost) ?> | +||||
+ | + | ispp()?"":"style=\"text-decoration:line-through\""; ?>>= t("Packaging and Posting") ?> | ++ | ">= basket::formatMoneyForWeb($postage)?> | +||||
+ | + | = t("Total Cost") ?> | ++ | = $basket->ispp()?basket::formatMoneyForWeb($basket->cost() + $postage):basket::formatMoneyForWeb($basket->cost()); ?> | + /* +Total Cost | = $basket->ispp()?basket::formatMoneyForWeb($basket->cost() + $postage):basket::formatMoneyForWeb($basket->cost()); ?> | + */ ?> +
+ if ($basket->street <> ""):?>
+
+ else :?>
+
+ endif;?>
+ = basket::createFullName($basket) ?> + if ($basket->street <> ""):?> + = $basket->street ?> = $basket->house ?> + = $basket->postcode ?> = $basket->town ?> + endif;?> + + = $basket->email ?> + if ($basket->phone <> ""):?> + = $basket->phone ?> + endif;?> + + $postage = $basket->postage_cost(); + $ppon = $basket->ispp();?> + + if (($ppon) && ($postage > 0)):?> + = t("Delivery by mail") ?> + elseif ($postage > 0):?> + $pickup_location = basket::getPickupLocation(); ?> + = t("Pickup at")." ".$pickup_location ?> + else:?> + = t("Delivery by e-mail") ?> + endif;?> + + + |
+
+ if ($basket->childname <> ""):?>
+ + = $basket->childname ?> + = $basket->childgroup ?> + endif;?> + if ($basket->comments <> ""):?> + + = $basket->comments ?> + + endif;?> + |
+
+ = t("The first step is to fill in some details about yourself. These details are used to create a set of encryption keys that will be used to communicate with paypal.") ?> +
+ = $form ?> + " + class="left gButtonLink ui-state-default ui-corner-all ui-icon-left"> + = t("Cancel") ?> + + " + class="right gButtonLink ui-state-default ui-corner-all ui-icon-right"> + = t("Next") ?> ++ = t("Open your paypal account on a seperate window and navigate to My account / profile / Selling Preferences - Encrypted Payment Settings.") ?> + = t("From this page press the download button to donwload paypals public certificate. Then paste the documents contents into the edit box below.") ?> +
+ = $form ?> + " + class="left gButtonLink ui-state-default ui-corner-all ui-icon-left"> + = t("Cancel") ?> + + " + class="right gButtonLink ui-state-default ui-corner-all ui-icon-right"> + = t("Next") ?> += t("Picture") ?> | += t("Product") ?> | += t("Quantity") ?> | += t("Cost") ?> | += t("Actions") ?> | +
---|---|---|---|---|
+ $item = $prod_details->getItem(); ?>
+ $width = $item->width; /* added JtK */?>
+
+
+
+ style="width=60px;"/>
+ else: ?>
+ style="width=90px;"/>
+ endif; ?>
+
+ |
+ = html::clean($prod_details->product_description()) ?> | += html::clean($prod_details->quantity) ?> | +$total += $prod_details->cost /* added 'align=right' JtK */?> + = basket::formatMoneyForWeb($prod_details->cost); ?> | +" + class="g-button2 ui-state-default ui-corner-all ui-icon-left"> /* changed 'g-button2' JtK */?> + + | +
+ | ispp()?"":"style=\"text-decoration:line-through\""; ?>>= t("Postage and Packaging") ?> | ++ | ">= basket::formatMoneyForWeb($postage)?> | ++ |
+ | = t("Total Cost") ?> | /* added 'width/' JtK */?> ++ | /* added class+' JtK */?>= $basket->ispp()?basket::formatMoneyForWeb($total + $postage):basket::formatMoneyForWeb($total)?> | ++ |
ispp()?"":"checked"; ?>/>= t(" Select if you wish to pick up the photos.") ?> | +
Bestelnummer | +Bestelstatus | +Gebeurtenis | +Datum/tijd | +
---|---|---|---|
=basket::getOrderPrefix().$order_log->id?> | +=$order_log->status()?> | +=$order_log->event()?> | +=gallery::date_time($order_log->timestamp)?> | +
Bestelnummer | +Naam | +Bestelstatus | +Verzending | +Bedrag | +|||
---|---|---|---|---|---|---|---|
=basket::getOrderPrefix().$order->id?> | +=$order->name?> | + $id=$order->id;?> + /* +=basket::getOrderPrefix().$order->id?> + | ">=$order->status()?> | +=$order->status()?> | + */?> +=$order->status()?> | +=$order->payment_method()?> | +=basket::formatMoneyForWeb($order->cost)?> | +
+ | + | + | Totaal | +=basket::formatMoneyForWeb($total)?> | +