diff --git a/modules/basket/controllers/basket.php b/modules/basket/controllers/basket.php index 00f07c3e..270c9ecb 100644 --- a/modules/basket/controllers/basket.php +++ b/modules/basket/controllers/basket.php @@ -151,14 +151,14 @@ Items Ordered: print $template; } - private function getAddToBasketForm(){ + 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()); + ->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")); @@ -170,7 +170,12 @@ Items Ordered: access::verify_csrf(); - $form = self::getAddToBasketForm(); + + if (!isset($_POST['id'])) + { + die("no id"); + } + $form = self::getAddToBasketForm($_POST['id']); $valid = $form->validate(); if ($valid){ @@ -203,9 +208,10 @@ Items Ordered: } // get the basket to add to - $form = self::getAddToBasketForm(); + $form = self::getAddToBasketForm($id); $form->add_to_basket->id->value($id); $form->add_to_basket->quantity->value(1); + $view->form = $form; $view->item = $item; diff --git a/modules/basket/helpers/basket.php b/modules/basket/helpers/basket.php index 70dd3f44..5e175303 100644 --- a/modules/basket/helpers/basket.php +++ b/modules/basket/helpers/basket.php @@ -40,16 +40,16 @@ class basket_Core { "MXN" => "Mexican Peso"); static $format= array( - "AUD" => "$", - "CAD" => "$", - "EUR" => "€", - "GBP" => "£", - "JPY" => "¥", - "USD" => "$", - "NZD" => "$", + "AUD" => "$", + "CAD" => "$", + "EUR" => "€", + "GBP" => "£", + "JPY" => "¥", + "USD" => "$", + "NZD" => "$", "CHF" => "", - "HKD" => "$", - "SGD" => "$", + "HKD" => "$", + "SGD" => "$", "SEK" => "", "DKK" => "", "PLN" => "", @@ -63,12 +63,13 @@ class basket_Core { static function get_configure_form() { $form = new Forge("admin/configure", "", "post", array("id" => "gConfigureForm")); $group = $form->group("configure")->label(t("Configure Basket")); - $group->input("email")->label(t("Order Email Address"))->id("gOrderEmailAddress"); - $group->checkbox("paypal")->label(t("Use Paypal"))->id("gPaypal"); - $group->input("paypal_account")->label(t("Paypal Account"))->id("gPaypalAddress"); + $group->input("email")->label(t("Offline Paying Email Address"))->id("gOrderEmailAddress"); $group->dropdown("currency") ->label(t("Currency")) ->options(self::$currencies); + + $group->checkbox("paypal")->label(t("Use Paypal"))->id("gPaypal"); + $group->input("paypal_account")->label(t("Paypal E-Mail Address"))->id("gPaypalAddress"); $group->submit("")->value(t("Save")); return $form; } diff --git a/modules/basket/helpers/basket_event.php b/modules/basket/helpers/basket_event.php index 12377439..25b55f28 100644 --- a/modules/basket/helpers/basket_event.php +++ b/modules/basket/helpers/basket_event.php @@ -40,4 +40,69 @@ class basket_event_Core{ ->url(url::site("admin/product_lines"))); } + + 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("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("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/modules/basket/helpers/basket_installer.php b/modules/basket/helpers/basket_installer.php index 1ec5edb4..0dfd3f08 100644 --- a/modules/basket/helpers/basket_installer.php +++ b/modules/basket/helpers/basket_installer.php @@ -27,6 +27,23 @@ class basket_installer { `description` varchar(1024), 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` INTEGER(9) default -1, + PRIMARY KEY (`id`)) + ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + product::create("4x6",5,"4\"x6\" print"); product::create("8x10",25,"8\"x10\" print"); product::create("8x12",30,"8\"x12\" print"); @@ -37,5 +54,7 @@ class basket_installer { 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}"); } } diff --git a/modules/basket/helpers/basket_theme.php b/modules/basket/helpers/basket_theme.php index ebc91546..b8d513e9 100644 --- a/modules/basket/helpers/basket_theme.php +++ b/modules/basket/helpers/basket_theme.php @@ -35,12 +35,14 @@ class basket_theme_Core { $theme->script("gallery.panel.js"); } } - static function photo_top($theme) - { - $view = new View("add_to_basket.html"); + static function photo_top($theme){ + if ( product::isForSale($theme->item()->id)){ + $view = new View("add_to_basket.html"); - $view->item = $theme->item(); + $view->item = $theme->item(); - return $view->render(); + return $view->render(); + } + return ""; } } diff --git a/modules/basket/helpers/product.php b/modules/basket/helpers/product.php index 3131c229..27d01577 100644 --- a/modules/basket/helpers/product.php +++ b/modules/basket/helpers/product.php @@ -80,12 +80,95 @@ class product_Core { return $product; } - static function getProductArray(){ + 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 + $product_override = ORM::factory("product_override")->where('item_id', $parent->id)->find(); + if ($product_override->loaded){ + break; + } + } + } + $products = ORM::factory("product")->find_all(); foreach ($products as $product){ - $producta[$product->id] = $product->description." (".basket::formatMoney($product->cost).")"; + $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] = $product->description." (".basket::formatMoney($cost).")"; + } } return $producta; } + + static function isForSale($id){ + + // 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 + $product_override = ORM::factory("product_override")->where('item_id', $parent->id)->find(); + if ($product_override->loaded){ + 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; + } + } } \ No newline at end of file diff --git a/modules/basket/libraries/Session_Basket.php b/modules/basket/libraries/Session_Basket.php index 7ddc5ad7..3aa31f12 100644 --- a/modules/basket/libraries/Session_Basket.php +++ b/modules/basket/libraries/Session_Basket.php @@ -17,7 +17,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - class basket_item { public $product; @@ -149,4 +148,4 @@ class Session_Basket_Core { return $basket; } -} +} \ No newline at end of file diff --git a/modules/basket/models/item_product.php b/modules/basket/models/item_product.php new file mode 100644 index 00000000..e152ab19 --- /dev/null +++ b/modules/basket/models/item_product.php @@ -0,0 +1,22 @@ + -
page_type != 'basket'): ?> - contents)): ?> + contents) && ($basket->size() > 0)): ?> +
" title=""> ">
size()?> items
- - " - title=""> - ">
-
- -
+ + diff --git a/modules/basket/views/confirm_order.html.php b/modules/basket/views/confirm_order.html.php index 2847bce0..0f6ebee9 100644 --- a/modules/basket/views/confirm_order.html.php +++ b/modules/basket/views/confirm_order.html.php @@ -48,12 +48,12 @@ function so(){document.confirm.submit();} quantity) ?> - cost) ?> + cost)) ?> "> - Total Costcost()?> + Total Costcost())?> diff --git a/modules/basket/views/view_basket.html.php b/modules/basket/views/view_basket.html.php index efd0df42..e1e51f17 100644 --- a/modules/basket/views/view_basket.html.php +++ b/modules/basket/views/view_basket.html.php @@ -74,7 +74,7 @@ cost?> - cost) ?> + cost)) ?>