/** * returns the inital (all) products, based on the all the eligile products * for the page. * * This is THE pivotal method that probably changes for classes that * extend ProductGroup as here you can determine what products or other buyables are shown. * * The return from this method will then be sorted and filtered to product the final product list * * @return DataObjectSet | Null **/ public function currentInitialProducts($extraFilter = null, $alternativeFilterKey = '') { $this->allProducts = parent::currentInitialProducts(); if (!$extraFilter) { $dos = null; //do nothing - show all products } elseif ($extraFilter instanceof DataList) { $dos = $tagOrTags; //do nothing } elseif ($tagOrTags instanceof DataObject) { $dos = new ArrayList(array($tagOrTags)); } elseif (is_array($extraFilter) || intval($extraFilter) == $extraFilter) { $dos = EcommerceProductTag::get()->filter(array("ID" => $extraFilter)); } else { return null; } //add at least one product - albeit a fake one... $idArray = array(); if ($dos && $dos->count()) { foreach ($dos as $do) { $products = $do->getManyManyComponents('Products'); if ($products && $products->count()) { $addedArray = $products->column("ID"); if (is_array($addedArray) && count($addedArray)) { $idArray = array_merge($idArray, $addedArray); } } } } if (count($idArray)) { $this->allProducts = $this->allProducts->filter(array("ID" => $idArray)); } return $this->allProducts; }
function onBeforeWrite() { parent::onBeforeWrite(); if (isset($_REQUEST["AddATag"])) { $name = Convert::raw2sql($_REQUEST["AddATag"]); if ($name) { $this->newTag = EcommerceProductTag::get()->filterAny(array("Title" => $name, "Code" => $name))->first(); if (!$this->newTag) { $this->newTag = new EcommerceProductTag(); $this->newTag->Title = $name; $this->newTag->Code = $name; $this->newTag->write(); //TO DO - does not work!!! } } } }
/** * Process and render search results. * * @param array $data The raw request data submitted by user * @param SearchForm $form The form instance that was submitted * @param SS_HTTPRequest $request Request generated for this action */ function modulesearchformresults($data, $form, $request) { $data = array('Results' => $form->getResults(), 'Query' => $form->getSearchQuery(), 'Title' => _t('SearchForm.SearchResults', 'Search Results')); //search tags //search authors if ($data["Results"]) { foreach ($data["Results"] as $key => $resultItem) { if (!$resultItem instanceof ModuleProduct) { $data["Results"]->remove($resultItem); } } } else { $data["Results"] = new ArrayList(); } $search = Convert::raw2sql($data["Query"]); if (strlen($search) > 2) { $additionalProducts = ModuleProduct::get()->filterAny(array("Code:PartialMatch" => $search, "MenuTitle:PartialMatch" => $search)); if ($additionalProducts) { foreach ($additionalProducts as $moduleProduct) { $data["Results"]->push($moduleProduct); } } $tags = EcommerceProductTag::get()->filterAny(array("Title:PartialMatch" => $search, "Synonyms:PartialMatch" => $search, "Explanation:PartialMatch" => $search)); if ($tags->count()) { foreach ($tags as $tag) { $rows = DB::query("SELECT ProductID FROM EcommerceProductTag_Products WHERE EcommerceProductTagID = " . $tag->ID); if ($rows) { foreach ($rows as $row) { $item = ModuleProduct::get()->byID($row["ProductID"]); if ($item) { $data["Results"]->push($item); } } } } } $authors = Member::get()->filterAny(array("ScreenName:PartialMatch" => $search, "FirstName:PartialMatch" => $search, "Surname:PartialMatch" => $search)); if ($authors->count()) { foreach ($authors as $author) { $rows = DB::query("SELECT \"ModuleProductID\" FROM \"ModuleProduct_Authors\" WHERE \"MemberID\" = " . $author->ID); if ($rows) { foreach ($rows as $row) { $item = ModuleProduct::get()->byID($row["ModuleProductID"]); if ($item) { $data["Results"]->push($item); } } } } } } if ($data["Results"] && $data["Results"] instanceof DataObjectSet) { $data["Results"]->removeDuplicates(); } if (Director::is_ajax()) { return Convert::array2json(array("ModuleProducts" => $data["Results"]->column("ID"))); } return $this->customise(array("Products" => $data["Results"])); }
static function get_by_code($code) { $code = Convert::raw2sql($code); return EcommerceProductTag::get()->filter(array("Code" => $code))->first(); }
function submit($data, $form) { $member = Member::currentUser(); if (!$member) { $form->setMessage("You need to be logged in to edit this module.", "bad"); $this->redirectBack(); return; } $data = Convert::raw2sql($data); $page = null; if (isset($data["ModuleProductID"])) { $page = ModuleProduct::get()->byID(intval($data["ModuleProductID"])); } if (!$page) { $page = new ModuleProduct(); } if (isset($page->ParentID)) { $oldParentID = $page->ParentID; } $form->saveInto($page); $page->Title = $data["Title"]; $page->MenuTitle = $data["Title"]; if (!$member->inGroup("ADMIN")) { $page->ShowInMenus = 0; $page->ShowInMenus = 0; $parentPage = AddingModuleProduct::get()->First(); if ($parentPage) { $page->ParentID = $parentPage->ID; } } $page->writeToStage('Stage'); $page->Publish('Stage', 'Live'); $page->Status = "Published"; $page->flushCache(); if ($page->Authors()->count() == 0 && $member) { $page->Authors()->addMany(array($member->ID => $member->ID)); } if (!isset($data["EcommerceProductTags"]) || !is_array($data["EcommerceProductTags"]) || !count($data["EcommerceProductTags"])) { $data["EcommerceProductTags"] = array(-1 => -1); } if (isset($data["AdditionalTags"]) && $data["AdditionalTags"]) { $extraTagsArray = explode(",", $data["AdditionalTags"]); if (is_array($extraTagsArray) && count($extraTagsArray)) { foreach ($extraTagsArray as $tag) { $tag = trim($tag); $obj = EcommerceProductTag::get()->filter(array("Title" => $tag))->first(); if (!$obj) { $obj = new EcommerceProductTag(); $obj->Title = $tag; $obj->write(); } $data["EcommerceProductTags"][$obj->ID] = $obj->ID; } } } DB::query("DELETE FROM \"EcommerceProductTag_Products\" WHERE \"ProductID\" = " . $page->ID . " AND \"EcommerceProductTagID\" NOT IN (" . implode(",", $data["EcommerceProductTags"]) . ")"); if (is_array($data["EcommerceProductTags"]) && count($data["EcommerceProductTags"])) { $page->EcommerceProductTags()->addMany($data["EcommerceProductTags"]); } if (Director::is_ajax()) { return $page->renderWith("ModuleProductInner"); } else { $this->redirect($page->Link()); } }