public function setProductLoader(ProductLoader $loader) { // @todo this should be set to product loader's include deleted flag $loader->includeDeleted(true); $this->_productLoader = $loader; $this->_entityLoaderCollection->add('product', $this->_productLoader); }
/** * Get an array of choices for product names * * @return array */ private function _getProductChoices() { $products = $this->_productLoader->getAll(); $choices = []; foreach ($products as $product) { $choices[$product->id] = $product->getName(); } return $choices; }
/** * Validate submitted product data to ensure that products can be properly loaded to appear on the front end * * @param array $data * @throws Exception\BundleBuildException Throws exception if data for a required field is missing * @throws Exception\BundleBuildException Throws exception if either an option name or an option value is set * without the other being set * @throws Exception\BundleBuildException Throws exception if the product loaded has no units matching the * options submitted */ private function _validateProductData(array $data) { foreach ($this->_requiredProductFields as $required) { if (!array_key_exists($required, $data)) { throw new Exception\BundleBuildException('Product data is missing `' . $required . '` field'); } } if (!empty($data[Form\BundleProductForm::OPTION_NAME]) xor !empty($data[Form\BundleProductForm::OPTION_VALUE])) { throw new Exception\BundleBuildException('Product (' . $data[Form\BundleProductForm::PRODUCT] . ') data must contain either both option name and value, or neither'); } if ($data[Form\BundleProductForm::OPTION_NAME] && $data[Form\BundleProductForm::OPTION_VALUE]) { $product = $this->_productLoader->getByID($data[Form\BundleProductForm::PRODUCT]); $optionName = $data[Form\BundleProductForm::OPTION_NAME]; $optionValue = $data[Form\BundleProductForm::OPTION_VALUE]; $optionExists = false; foreach ($product->getUnits() as $unit) { if ($unit->hasOption($optionName) && $unit->getOption($optionName) === $optionValue) { $optionExists = true; break; } } if (false === $optionExists) { throw new Exception\BundleBuildException('Product `' . $product->name . '` does not have any units with an option name of `' . $optionName . '` and value of ' . $optionValue . '`'); } } }
public function reverseTransform($products) { $products = (array) $products; return $this->_productLoader->getByID($products); }