Esempio n. 1
0
 /**
  * Retrieves the article .Throws an exception if article does not exist,
  * is not buyable or visible.
  *
  * @param bool   $blCheckProduct       checks if product is buyable and visible
  * @param string $sProductId           product id
  * @param bool   $blDisableLazyLoading disable lazy loading
  *
  * @throws oxArticleException exception in case of no current object product id is set
  * @throws oxNoArticleException exception in case if product not exitst or not visible
  * @throws oxArticleInputException exception if product is not buyable (stock and so on)
  *
  * @return oxArticle|oxOrderArticle
  */
 public function getArticle($blCheckProduct = false, $sProductId = null, $blDisableLazyLoading = false)
 {
     if ($this->_oArticle === null || !$this->_oArticle->isOrderArticle() && $blDisableLazyLoading) {
         $sProductId = $sProductId ? $sProductId : $this->_sProductId;
         if (!$sProductId) {
             //this exception may not be caught, anyhow this is a critical exception
             /** @var oxArticleException $oEx */
             $oEx = oxNew('oxArticleException');
             $oEx->setMessage('EXCEPTION_ARTICLE_NOPRODUCTID');
             throw $oEx;
         }
         $this->_oArticle = oxNew('oxArticle');
         // #M773 Do not use article lazy loading on order save
         if ($blDisableLazyLoading) {
             $this->_oArticle->modifyCacheKey('_allviews');
             $this->_oArticle->disableLazyLoading();
         }
         // performance:
         // - skipping variants loading
         // - skipping 'ab' price info
         // - load parent field
         $this->_oArticle->setNoVariantLoading(true);
         $this->_oArticle->setLoadParentData(true);
         if (!$this->_oArticle->load($sProductId)) {
             /** @var oxNoArticleException $oEx */
             $oEx = oxNew('oxNoArticleException');
             $oLang = oxRegistry::getLang();
             $oEx->setMessage(sprintf($oLang->translateString('ERROR_MESSAGE_ARTICLE_ARTICLE_DOES_NOT_EXIST', $oLang->getBaseLanguage()), $sProductId));
             $oEx->setArticleNr($sProductId);
             $oEx->setProductId($sProductId);
             throw $oEx;
         }
         // cant put not visible product to basket (M:1286)
         if ($blCheckProduct && !$this->_oArticle->isVisible()) {
             /** @var oxNoArticleException $oEx */
             $oEx = oxNew('oxNoArticleException');
             $oLang = oxRegistry::getLang();
             $oEx->setMessage(sprintf($oLang->translateString('ERROR_MESSAGE_ARTICLE_ARTICLE_DOES_NOT_EXIST', $oLang->getBaseLanguage()), $this->_oArticle->oxarticles__oxartnum->value));
             $oEx->setArticleNr($sProductId);
             $oEx->setProductId($sProductId);
             throw $oEx;
         }
         // cant put not buyable product to basket
         if ($blCheckProduct && !$this->_oArticle->isBuyable()) {
             /** @var oxArticleInputException $oEx */
             $oEx = oxNew('oxArticleInputException');
             $oEx->setMessage('ERROR_MESSAGE_ARTICLE_ARTICLE_NOT_BUYABLE');
             $oEx->setArticleNr($sProductId);
             $oEx->setProductId($sProductId);
             throw $oEx;
         }
     }
     return $this->_oArticle;
 }