OXID eShop CE  4.9.7
 All Classes Files Functions Variables Pages
oxsimplevariant.php
Go to the documentation of this file.
1 <?php
2 
7 class oxSimpleVariant extends oxI18n implements oxIUrl
8 {
9 
15  protected $_blUseLazyLoading = true;
16 
22  protected $_oPrice = null;
23 
29  protected $_oParent = null;
30 
36  protected $_aStdUrls = array();
37 
43  protected $_aBaseStdUrls = array();
44 
50  protected $_aSeoUrls = array();
51 
57  protected $_oUser = null;
58 
63  public function __construct()
64  {
66  $this->_sCacheKey = "simplevariants";
67  $this->init('oxarticles');
68  }
69 
76  public function assign($aRecord)
77  {
78  // load object from database
79  parent::assign($aRecord);
80 
81  }
82 
83 
90  public function getSelectLists()
91  {
92  return null;
93  }
94 
100  public function getArticleUser()
101  {
102  if ($this->_oUser === null) {
103  $this->_oUser = $this->getUser();
104  }
105 
106  return $this->_oUser;
107  }
108 
114  protected function _getGroupPrice()
115  {
116  $dPrice = $this->oxarticles__oxprice->value;
117  if ($oUser = $this->getArticleUser()) {
118  if ($oUser->inGroup('oxidpricea')) {
119  $dPrice = $this->oxarticles__oxpricea->value;
120  } elseif ($oUser->inGroup('oxidpriceb')) {
121  $dPrice = $this->oxarticles__oxpriceb->value;
122  } elseif ($oUser->inGroup('oxidpricec')) {
123  $dPrice = $this->oxarticles__oxpricec->value;
124  }
125  }
126 
127  // #1437/1436C - added config option, and check for zero A,B,C price values
128  if ($this->getConfig()->getConfigParam('blOverrideZeroABCPrices') && (double) $dPrice == 0) {
129  $dPrice = $this->oxarticles__oxprice->value;
130  }
131 
132  return $dPrice;
133  }
134 
135 
141  public function getPrice()
142  {
143  $myConfig = $this->getConfig();
144  // 0002030 No need to return price if it disabled for better performance.
145  if (!$myConfig->getConfigParam('bl_perfLoadPrice')) {
146  return;
147  }
148 
149  if ($this->_oPrice === null) {
150  $this->_oPrice = oxNew("oxPrice");
151  if (($dPrice = $this->_getGroupPrice())) {
152  $this->_oPrice->setPrice($dPrice, $this->_dVat);
153 
154  $this->_applyParentVat($this->_oPrice);
155  $this->_applyCurrency($this->_oPrice);
156  // apply discounts
157  $this->_applyParentDiscounts($this->_oPrice);
158  } elseif (($oParent = $this->getParent())) {
159  $this->_oPrice = $oParent->getPrice();
160  }
161  }
162 
163  return $this->_oPrice;
164  }
165 
172  protected function _applyCurrency(oxPrice $oPrice, $oCur = null)
173  {
174  if (!$oCur) {
175  $oCur = $this->getConfig()->getActShopCurrencyObject();
176  }
177 
178  $oPrice->multiply($oCur->rate);
179  }
180 
186  protected function _applyParentDiscounts($oPrice)
187  {
188  if (($oParent = $this->getParent())) {
189  $oParent->applyDiscountsForVariant($oPrice);
190  }
191  }
192 
198  protected function _applyParentVat($oPrice)
199  {
200  if (($oParent = $this->getParent()) && !$this->getConfig()->getConfigParam('bl_perfCalcVatOnlyForBasketOrder')) {
201  $oParent->applyVats($oPrice);
202  }
203  }
204 
210  public function setPrice($oPrice)
211  {
212  $this->_oPrice = $oPrice;
213  }
214 
220  public function getFPrice()
221  {
222  $sPrice = null;
223  if (($oPrice = $this->getPrice())) {
224  $sPrice = oxRegistry::getLang()->formatCurrency($oPrice->getBruttoPrice());
225  }
226 
227  return $sPrice;
228  }
229 
235  public function setParent($oParent)
236  {
237  $this->_oParent = $oParent;
238  }
239 
245  public function getParent()
246  {
247  return $this->_oParent;
248  }
249 
255  public function getLinkType()
256  {
257  $iLinkType = 0;
258  if (($oParent = $this->getParent())) {
259  $iLinkType = $oParent->getLinkType();
260  }
261 
262  return $iLinkType;
263  }
264 
272  public function inCategory($sCatNid)
273  {
274  $blIn = false;
275  if (($oParent = $this->getParent())) {
276  $blIn = $oParent->inCategory($sCatNid);
277  }
278 
279  return $blIn;
280  }
281 
289  public function inPriceCategory($sCatNid)
290  {
291  $blIn = false;
292  if (($oParent = $this->getParent())) {
293  $blIn = $oParent->inPriceCategory($sCatNid);
294  }
295 
296  return $blIn;
297  }
298 
308  public function getBaseStdLink($iLang, $blAddId = true, $blFull = true)
309  {
310  if (!isset($this->_aBaseStdUrls[$iLang][$iLinkType])) {
311  $oArticle = oxNew("oxArticle");
312  $oArticle->setId($this->getId());
313  $oArticle->setLinkType($iLinkType);
314  $this->_aBaseStdUrls[$iLang][$iLinkType] = $oArticle->getBaseStdLink($iLang, $blAddId, $blFull);
315  }
316 
317  return $this->_aBaseStdUrls[$iLang][$iLinkType];
318  }
319 
328  public function getStdLink($iLang = null, $aParams = array())
329  {
330  if ($iLang === null) {
331  $iLang = (int) $this->getLanguage();
332  }
333 
334  $iLinkType = $this->getLinkType();
335  if (!isset($this->_aStdUrls[$iLang][$iLinkType])) {
336  $oArticle = oxNew("oxArticle");
337  $oArticle->setId($this->getId());
338  $oArticle->setLinkType($iLinkType);
339  $this->_aStdUrls[$iLang][$iLinkType] = $oArticle->getStdLink($iLang, $aParams);
340  }
341 
342  return $this->_aStdUrls[$iLang][$iLinkType];
343  }
344 
352  public function getBaseSeoLink($iLang)
353  {
354  return oxRegistry::get("oxSeoEncoderArticle")->getArticleUrl($this, $iLang, $iLinkType);
355  }
356 
364  public function getLink($iLang = null)
365  {
366  if ($iLang === null) {
367  $iLang = (int) $this->getLanguage();
368  }
369 
370  if (!oxRegistry::getUtils()->seoIsActive()) {
371  return $this->getStdLink($iLang);
372  }
373 
374  $iLinkType = $this->getLinkType();
375  if (!isset($this->_aSeoUrls[$iLang][$iLinkType])) {
376  $this->_aSeoUrls[$iLang][$iLinkType] = $this->getBaseSeoLink($iLang);
377  }
378 
379  return $this->_aSeoUrls[$iLang][$iLinkType];
380 
381  }
382 }