From 65787ec9cb185dfcce0dce3be45c1470ff92acf2 Mon Sep 17 00:00:00 2001 From: rWatcher Date: Wed, 9 Sep 2009 14:50:04 -0400 Subject: [PATCH 1/9] Initial commit of rWInfo module. --- modules/rwinfo/helpers/rwinfo_installer.php | 24 +++++++ modules/rwinfo/helpers/rwinfo_theme.php | 73 +++++++++++++++++++++ modules/rwinfo/module.info | 3 + modules/rwinfo/notes.txt | 5 ++ modules/rwinfo/views/rwinfo_block.html.php | 55 ++++++++++++++++ 5 files changed, 160 insertions(+) create mode 100644 modules/rwinfo/helpers/rwinfo_installer.php create mode 100644 modules/rwinfo/helpers/rwinfo_theme.php create mode 100644 modules/rwinfo/module.info create mode 100644 modules/rwinfo/notes.txt create mode 100644 modules/rwinfo/views/rwinfo_block.html.php diff --git a/modules/rwinfo/helpers/rwinfo_installer.php b/modules/rwinfo/helpers/rwinfo_installer.php new file mode 100644 index 00000000..fd0359ae --- /dev/null +++ b/modules/rwinfo/helpers/rwinfo_installer.php @@ -0,0 +1,24 @@ +item()) { + if ($theme->item->id == 1) { + return ; + } + + $block = new Block(); + $block->css_id = "gMetadata"; + $block->title = $theme->item()->is_album() ? t("Album Info") : t("Photo Info"); + $block->content = new View("rwinfo_block.html"); + return $block; + } + } + + static function thumb_info($theme, $item) { + $results = ""; + if ($item->view_count) { + $results .= "
  • "; + $results .= t("Views: %view_count", array("view_count" => $item->view_count)); + $results .= "
  • "; + } + + if (module::is_active("tag")) { + $tagsItem = ORM::factory("tag") + ->join("items_tags", "tags.id", "items_tags.tag_id") + ->where("items_tags.item_id", $item->id) + ->find_all(); + if (count($tagsItem) > 0) { + $results .= "
  • "; + $results .= t("Tags:") . " "; + for ($counter=0; $counter" . html::clean($tagsItem[$counter]->name) . ", "; + } else { + $results .= "" . html::clean($tagsItem[$counter]->name) . ""; + } + } + $results .= "
  • "; + } + } + + if ($item->owner) { + $results .= "
  • "; + if ($item->owner->url) { + $results .= t("By: %owner_name", array("owner_name" => "owner->url}\">{$item->owner->full_name}")); + } else { + $results .= t("By: %owner_name", array("owner_name" => "{$item->owner->full_name}")); + } + $results .= "
  • "; + } + return $results; + } +} \ No newline at end of file diff --git a/modules/rwinfo/module.info b/modules/rwinfo/module.info new file mode 100644 index 00000000..7bbf8e37 --- /dev/null +++ b/modules/rwinfo/module.info @@ -0,0 +1,3 @@ +name = "rWInfo" +description = "Display extra information about photos and albums" +version = 1 diff --git a/modules/rwinfo/notes.txt b/modules/rwinfo/notes.txt new file mode 100644 index 00000000..38a3ed67 --- /dev/null +++ b/modules/rwinfo/notes.txt @@ -0,0 +1,5 @@ +Drop Title and Description (they're displayed elsewhere in the default theme, no reason to show them twice on the same page) +Hide the info sidebar for the root album (without title and description there really isn't anything worth displaying here) +Display date created for albums only (and continue to display the capture date for everything else) +Display tags in the info sidebar (if the tags module is active). +Display tags when mousing over the thumbnails (if tags module is active). diff --git a/modules/rwinfo/views/rwinfo_block.html.php b/modules/rwinfo/views/rwinfo_block.html.php new file mode 100644 index 00000000..b657bb82 --- /dev/null +++ b/modules/rwinfo/views/rwinfo_block.html.php @@ -0,0 +1,55 @@ + + From 901f3321d73b08ac7832642d611b0be9b8592d7b Mon Sep 17 00:00:00 2001 From: Ben Smith Date: Mon, 14 Sep 2009 17:11:06 +1200 Subject: [PATCH 2/9] Updated for Beta 3. Added ability to override individual products. --- modules/basket/controllers/basket.php | 14 +++- modules/basket/helpers/basket.php | 25 +++--- modules/basket/helpers/basket_event.php | 65 +++++++++++++++ modules/basket/helpers/basket_installer.php | 16 ++++ modules/basket/helpers/basket_theme.php | 12 +-- modules/basket/helpers/product.php | 87 ++++++++++++++++++++- modules/basket/libraries/Session_Basket.php | 3 +- modules/basket/models/item_product.php | 22 ++++++ modules/basket/models/product_override.php | 22 ++++++ modules/basket/views/basket.html.php | 13 +-- modules/basket/views/confirm_order.html.php | 4 +- modules/basket/views/view_basket.html.php | 4 +- 12 files changed, 249 insertions(+), 38 deletions(-) create mode 100644 modules/basket/models/item_product.php create mode 100644 modules/basket/models/product_override.php 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 dca5da90..7100e76f 100644 --- a/modules/basket/helpers/basket_installer.php +++ b/modules/basket/helpers/basket_installer.php @@ -35,7 +35,21 @@ class basket_installer 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"); @@ -46,5 +60,7 @@ class basket_installer static function deactivate(){ $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)): ?> + + + 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)) ?>