/** * Excluded products that can not be purchased * We all make a record of all the products that are in the current list * For efficiency sake, we do both these things at the same time. * IMPORTANT: Adjusts allProducts and returns it... * @todo: cache data per user .... * @return DataList */ protected function removeExcludedProductsAndSaveIncludedProducts() { if (is_array($this->canBePurchasedArray) && is_array($this->canNOTbePurchasedArray)) { //already done! } else { $this->canNOTbePurchasedArray = array(); $this->canBePurchasedArray = array(); if ($this->config()->get("actively_check_for_can_purchase")) { foreach ($this->allProducts as $buyable) { if (!$buyable->canPurchase()) { $this->canNOTbePurchasedArray[$buyable->ID] = $buyable->ID; } else { $this->canBePurchasedArray[$buyable->ID] = $buyable->ID; } } } else { if ($this->rawCount > 0) { $this->canBePurchasedArray = $this->allProducts->map("ID", "ID")->toArray(); } else { $this->canBePurchasedArray = array(); } } if (count($this->canNOTbePurchasedArray)) { $this->allProducts = $this->allProducts->Exclude(array("ID" => $this->canNOTbePurchasedArray)); } } return $this->allProducts; }