Go to the documentation of this file.00001 <?php
00002
00007 class oxBasketItem extends oxSuperCfg
00008 {
00009
00015 protected $_sProductId = null;
00016
00022 protected $_sTitle = null;
00023
00029 protected $_sVarSelect = null;
00030
00036 protected $_sIcon = null;
00037
00043 protected $_sLink = null;
00044
00050 protected $_oPrice = null;
00051
00057 protected $_oUnitPrice = null;
00058
00064 protected $_dAmount = 0.0;
00065
00071 protected $_dWeight = 0;
00072
00078 protected $_aSelList = array();
00079
00085 protected $_sShopId = null;
00086
00092 protected $_sNativeShopId = null;
00093
00099 protected $_blSkipDiscounts = false;
00100
00106 protected $_aPersistentParameters = array();
00107
00113 protected $_blBundle = false;
00114
00120 protected $_blIsDiscountArticle = false;
00121
00127 protected $_oArticle = null;
00128
00134 protected $_sDimageDirNoSsl = null;
00135
00141 protected $_sDimageDirSsl = null;
00142
00148 protected $_aChosenSelectlist = array();
00149
00155 protected $_sWrappingId = null;
00156
00162 protected $_sWishId = null;
00163
00169 protected $_sWishArticleId = null;
00170
00176 protected $_blCheckArticleStock = true;
00177
00178
00184 protected $_iLanguageId = null;
00185
00191 protected $_blSsl = null;
00192
00198 protected $_sIconUrl = null;
00199
00200
00206 protected $_oRegularUnitPrice = null;
00207
00208
00214 public function getRegularUnitPrice()
00215 {
00216 return $this->_oRegularUnitPrice;
00217 }
00218
00224 public function setRegularUnitPrice($oRegularUnitPrice)
00225 {
00226 $this->_oRegularUnitPrice = $oRegularUnitPrice;
00227 }
00228
00229
00246 public function init($sProductID, $dAmount, $aSel = null, $aPersParam = null, $blBundle = null)
00247 {
00248 $this->_setArticle($sProductID);
00249 $this->setAmount($dAmount);
00250 $this->_setSelectList($aSel);
00251 $this->setPersParams($aPersParam);
00252 $this->setBundle($blBundle);
00253 $this->setLanguageId(oxRegistry::getLang()->getBaseLanguage());
00254 }
00255
00267 public function initFromOrderArticle($oOrderArticle)
00268 {
00269 $this->_setFromOrderArticle($oOrderArticle);
00270 $this->setAmount($oOrderArticle->oxorderarticles__oxamount->value);
00271 $this->_setSelectList($oOrderArticle->getOrderArticleSelectList());
00272 $this->setPersParams($oOrderArticle->getPersParams());
00273 $this->setBundle($oOrderArticle->isBundle());
00274 }
00275
00281 public function setAsDiscountArticle($blIsDiscountArticle)
00282 {
00283 $this->_blIsDiscountArticle = $blIsDiscountArticle;
00284 }
00285
00291 public function setStockCheckStatus($blStatus)
00292 {
00293 $this->_blCheckArticleStock = $blStatus;
00294 }
00295
00301 public function getStockCheckStatus()
00302 {
00303 return $this->_blCheckArticleStock;
00304 }
00305
00317 public function setAmount($dAmount, $blOverride = true, $sItemKey = null)
00318 {
00319 try {
00320
00321 $dAmount = oxRegistry::get("oxInputValidator")->validateBasketAmount($dAmount);
00322 } catch (oxArticleInputException $oEx) {
00323 $oEx->setArticleNr($this->getProductId());
00324 $oEx->setProductId($this->getProductId());
00325
00326 throw $oEx;
00327 }
00328
00329 $oArticle = $this->getArticle(true);
00330
00331
00332
00333 $iOnStock = true;
00334
00335 if ($blOverride) {
00336 $this->_dAmount = $dAmount;
00337 } else {
00338 $this->_dAmount += $dAmount;
00339 }
00340
00341
00342 if ($this->getStockCheckStatus() == true) {
00343 $dArtStockAmount = $this->getSession()->getBasket()->getArtStockInBasket($oArticle->getId(), $sItemKey);
00344 $iOnStock = $oArticle->checkForStock($this->_dAmount, $dArtStockAmount);
00345 if ($iOnStock !== true) {
00346 if ($iOnStock === false) {
00347
00348 $this->_dAmount = 0;
00349 } else {
00350
00351 $this->_dAmount = $iOnStock;
00352 $blOverride = true;
00353 }
00354 }
00355 }
00356
00357
00358 $this->_dWeight = $oArticle->oxarticles__oxweight->value * $this->_dAmount;
00359
00360 if ($iOnStock !== true) {
00362 $oEx = oxNew('oxOutOfStockException');
00363 $oEx->setMessage('ERROR_MESSAGE_OUTOFSTOCK_OUTOFSTOCK');
00364 $oEx->setArticleNr($oArticle->oxarticles__oxartnum->value);
00365 $oEx->setProductId($oArticle->getProductId());
00366 $oEx->setRemainingAmount($this->_dAmount);
00367 $oEx->setBasketIndex($sItemKey);
00368 throw $oEx;
00369 }
00370 }
00371
00377 public function setPrice($oPrice)
00378 {
00379 $this->_oUnitPrice = clone $oPrice;
00380
00381 $this->_oPrice = clone $oPrice;
00382 $this->_oPrice->multiply($this->getAmount());
00383 }
00384
00390 public function getIconUrl()
00391 {
00392
00393 if ($this->_sIconUrl === null || $this->_blSsl != $this->getConfig()->isSsl()) {
00394 $this->_sIconUrl = $this->getArticle()->getIconUrl();
00395 }
00396
00397 return $this->_sIconUrl;
00398 }
00399
00412 public function getArticle($blCheckProduct = false, $sProductId = null, $blDisableLazyLoading = false)
00413 {
00414 if ($this->_oArticle === null || (!$this->_oArticle->isOrderArticle() && $blDisableLazyLoading)) {
00415 $sProductId = $sProductId ? $sProductId : $this->_sProductId;
00416 if (!$sProductId) {
00417
00419 $oEx = oxNew('oxArticleException');
00420 $oEx->setMessage('EXCEPTION_ARTICLE_NOPRODUCTID');
00421 throw $oEx;
00422 }
00423
00424 $this->_oArticle = oxNew('oxarticle');
00425
00426 if ($blDisableLazyLoading) {
00427 $this->_oArticle->modifyCacheKey('_allviews');
00428 $this->_oArticle->disableLazyLoading();
00429 }
00430
00431
00432
00433
00434
00435 $this->_oArticle->setNoVariantLoading(true);
00436 $this->_oArticle->setLoadParentData(true);
00437 if (!$this->_oArticle->load($sProductId)) {
00439 $oEx = oxNew('oxNoArticleException');
00440 $oLang = oxRegistry::getLang();
00441 $oEx->setMessage(sprintf($oLang->translateString('ERROR_MESSAGE_ARTICLE_ARTICLE_DOES_NOT_EXIST', $oLang->getBaseLanguage()), $sProductId));
00442 $oEx->setArticleNr($sProductId);
00443 $oEx->setProductId($sProductId);
00444 throw $oEx;
00445 }
00446
00447
00448 if ($blCheckProduct && !$this->_oArticle->isVisible()) {
00450 $oEx = oxNew('oxNoArticleException');
00451 $oLang = oxRegistry::getLang();
00452 $oEx->setMessage(sprintf($oLang->translateString('ERROR_MESSAGE_ARTICLE_ARTICLE_DOES_NOT_EXIST', $oLang->getBaseLanguage()), $this->_oArticle->oxarticles__oxartnum->value));
00453 $oEx->setArticleNr($sProductId);
00454 $oEx->setProductId($sProductId);
00455 throw $oEx;
00456 }
00457
00458
00459 if ($blCheckProduct && !$this->_oArticle->isBuyable()) {
00461 $oEx = oxNew('oxArticleInputException');
00462 $oEx->setMessage('ERROR_MESSAGE_ARTICLE_ARTICLE_NOT_BUYABLE');
00463 $oEx->setArticleNr($sProductId);
00464 $oEx->setProductId($sProductId);
00465 throw $oEx;
00466 }
00467 }
00468
00469 return $this->_oArticle;
00470 }
00471
00477 public function getdBundledAmount()
00478 {
00479 return $this->isBundle() ? $this->_dAmount : 0;
00480 }
00481
00487 public function getPrice()
00488 {
00489 return $this->_oPrice;
00490 }
00491
00497 public function getUnitPrice()
00498 {
00499 return $this->_oUnitPrice;
00500 }
00501
00507 public function getAmount()
00508 {
00509 return $this->_dAmount;
00510 }
00511
00517 public function getWeight()
00518 {
00519 return $this->_dWeight;
00520 }
00521
00527 public function getTitle()
00528 {
00529 if ($this->_sTitle === null || $this->getLanguageId() != oxRegistry::getLang()->getBaseLanguage()) {
00530
00531 $oArticle = $this->getArticle();
00532 $this->_sTitle = $oArticle->oxarticles__oxtitle->value;
00533
00534 if ($oArticle->oxarticles__oxvarselect->value) {
00535 $this->_sTitle = $this->_sTitle . ', ' . $this->getVarSelect();
00536 }
00537 }
00538
00539 return $this->_sTitle;
00540 }
00541
00547 public function getLink()
00548 {
00549 if ($this->_sLink === null || $this->getLanguageId() != oxRegistry::getLang()->getBaseLanguage()) {
00550 $this->_sLink = oxRegistry::get("oxUtilsUrl")->cleanUrl($this->getArticle()->getLink(), array('force_sid'));
00551 }
00552
00553 return $this->getSession()->processUrl($this->_sLink);
00554 }
00555
00561 public function getShopId()
00562 {
00563 return $this->_sShopId;
00564 }
00565
00571 public function getSelList()
00572 {
00573 return $this->_aSelList;
00574 }
00575
00581 public function getChosenSelList()
00582 {
00583 return $this->_aChosenSelectlist;
00584 }
00585
00591 public function isBundle()
00592 {
00593 return $this->_blBundle;
00594 }
00595
00601 public function isDiscountArticle()
00602 {
00603 return $this->_blIsDiscountArticle;
00604 }
00605
00611 public function isSkipDiscount()
00612 {
00613 return $this->_blSkipDiscounts;
00614 }
00615
00625 public function __get($sName)
00626 {
00627 if ($sName == 'oProduct') {
00628 return $this->getArticle();
00629 }
00630 }
00631
00637 public function __sleep()
00638 {
00639 $aRet = array();
00640 foreach (get_object_vars($this) as $sKey => $sVar) {
00641 if ($sKey != '_oArticle') {
00642 $aRet[] = $sKey;
00643 }
00644 }
00645
00646 return $aRet;
00647 }
00648
00664 protected function _setArticle($sProductId)
00665 {
00666 $oConfig = $this->getConfig();
00667 $oArticle = $this->getArticle(true, $sProductId);
00668
00669
00670 $this->_sProductId = $sProductId;
00671
00672 $this->_sTitle = null;
00673 $this->_sVarSelect = null;
00674 $this->getTitle();
00675
00676
00677 $this->_sIcon = $oArticle->oxarticles__oxicon->value;
00678 $this->_sIconUrl = $oArticle->getIconUrl();
00679 $this->_blSsl = $oConfig->isSsl();
00680
00681
00682 $this->_sLink = oxRegistry::get("oxUtilsUrl")->cleanUrl($oArticle->getLink(), array('force_sid'));
00683
00684
00685 $this->_sShopId = $oConfig->getShopId();
00686 $this->_sNativeShopId = $oArticle->oxarticles__oxshopid->value;
00687
00688
00689 $this->_sDimageDirNoSsl = $oArticle->nossl_dimagedir;
00690 $this->_sDimageDirSsl = $oArticle->ssl_dimagedir;
00691 }
00692
00702 protected function _setFromOrderArticle($oOrderArticle)
00703 {
00704
00705 $this->_oArticle = $oOrderArticle;
00706
00707
00708 $this->_sProductId = $oOrderArticle->getProductId();
00709
00710
00711 $this->_sTitle = $oOrderArticle->oxarticles__oxtitle->value;
00712
00713
00714 $this->_sShopId = $this->getConfig()->getShopId();
00715 $this->_sNativeShopId = $oOrderArticle->oxarticles__oxshopid->value;
00716 }
00717
00723 protected function _setSelectList($aSelList)
00724 {
00725
00726 $aSelectLists = $this->getArticle()->getSelectLists();
00727 if (!$aSelList || is_array($aSelList) && count($aSelList) == 0) {
00728 if ($iSelCnt = count($aSelectLists)) {
00729 $aSelList = array_fill(0, $iSelCnt, '0');
00730 }
00731 }
00732
00733 $this->_aSelList = $aSelList;
00734
00735
00736 if (count($this->_aSelList) && is_array($this->_aSelList)) {
00737 foreach ($this->_aSelList as $conkey => $iSel) {
00738 $this->_aChosenSelectlist[$conkey] = new stdClass();
00739 $this->_aChosenSelectlist[$conkey]->name = $aSelectLists[$conkey]['name'];
00740 $this->_aChosenSelectlist[$conkey]->value = $aSelectLists[$conkey][$iSel]->name;
00741 }
00742 }
00743 }
00744
00750 public function getPersParams()
00751 {
00752 return $this->_aPersistentParameters;
00753 }
00754
00760 public function setPersParams($aPersParam)
00761 {
00762 $this->_aPersistentParameters = $aPersParam;
00763 }
00764
00770 public function setBundle($blBundle)
00771 {
00772 $this->_blBundle = $blBundle;
00773 }
00774
00780 public function setSkipDiscounts($blSkip)
00781 {
00782 $this->_blSkipDiscounts = $blSkip;
00783 }
00784
00790 public function getProductId()
00791 {
00792 return $this->_sProductId;
00793 }
00794
00800 public function setWrapping($sWrapId)
00801 {
00802 $this->_sWrappingId = $sWrapId;
00803 }
00804
00810 public function getWrappingId()
00811 {
00812 return $this->_sWrappingId;
00813 }
00814
00820 public function getWrapping()
00821 {
00822 $oWrap = null;
00823 if ($sWrapId = $this->getWrappingId()) {
00824 $oWrap = oxNew('oxwrapping');
00825 $oWrap->load($sWrapId);
00826 }
00827
00828 return $oWrap;
00829 }
00830
00836 public function getWishId()
00837 {
00838 return $this->_sWishId;
00839 }
00840
00846 public function setWishId($sWishId)
00847 {
00848 $this->_sWishId = $sWishId;
00849 }
00850
00856 public function setWishArticleId($sArticleId)
00857 {
00858 $this->_sWishArticleId = $sArticleId;
00859 }
00860
00866 public function getWishArticleId()
00867 {
00868 return $this->_sWishArticleId;
00869 }
00870
00878 public function getFRegularUnitPrice()
00879 {
00880 return oxRegistry::getLang()->formatCurrency($this->getRegularUnitPrice()->getPrice());
00881 }
00882
00890 public function getFUnitPrice()
00891 {
00892 return oxRegistry::getLang()->formatCurrency($this->getUnitPrice()->getPrice());
00893 }
00894
00902 public function getFTotalPrice()
00903 {
00904 return oxRegistry::getLang()->formatCurrency($this->getPrice()->getPrice());
00905 }
00906
00912 public function getVatPercent()
00913 {
00914 return oxRegistry::getLang()->formatVat($this->getPrice()->getVat());
00915 }
00916
00922 public function getVarSelect()
00923 {
00924 if ($this->_sVarSelect === null || $this->getLanguageId() != oxRegistry::getLang()->getBaseLanguage()) {
00925 $oArticle = $this->getArticle();
00926 $this->_sVarSelect = $oArticle->oxarticles__oxvarselect->value ? $oArticle->oxarticles__oxvarselect->value : '';
00927 }
00928
00929 return $this->_sVarSelect;
00930 }
00931
00937 public function getLanguageId()
00938 {
00939 return $this->_iLanguageId;
00940 }
00941
00947 public function setLanguageId($iLanguageId)
00948 {
00949 $iOldLang = $this->_iLanguageId;
00950 $this->_iLanguageId = $iLanguageId;
00951
00952
00953 if ($iOldLang !== null && $iOldLang != $iLanguageId) {
00954 try {
00955 $this->_setArticle($this->getProductId());
00956 } catch (oxNoArticleException $oEx) {
00957 oxRegistry::get("oxUtilsView")->addErrorToDisplay($oEx);
00958 } catch (oxArticleInputException $oEx) {
00959 oxRegistry::get("oxUtilsView")->addErrorToDisplay($oEx);
00960 }
00961 }
00962 }
00963 }