OXID eShop CE  4.8.12
 All Classes Files Functions Variables Pages
oxmdvariant.php
Go to the documentation of this file.
1 <?php
2 
7 class oxMdVariant extends oxSuperCfg
8 {
14  protected $_sId;
15 
21  protected $_sParentId;
22 
28  protected $_sArticleId;
29 
35  protected $_sName;
36 
42  protected $_sUrl;
43 
49  protected $_dPrice = null;
50 
56  protected $_sFPrice;
57 
63  protected $_aSubvariants = array();
64 
72  public function setId($sId)
73  {
74  $this->_sId = $sId;
75  }
76 
82  public function getId()
83  {
84  return $this->_sId;
85  }
86 
94  public function setParentId($sParentId)
95  {
96  $this->_sParentId = $sParentId;
97  }
98 
104  public function getParentId()
105  {
106  return $this->_sParentId;
107  }
108 
116  public function setMdSubvariants($aSubvariants)
117  {
118  $this->_aSubvariants = $aSubvariants;
119  }
120 
126  public function getMdSubvariants()
127  {
128  return $this->_aSubvariants;
129  }
130 
136  public function getFirstMdSubvariant()
137  {
138  $aMdSubvariants = $this->getMdSubvariants();
139  if (count($aMdSubvariants))
140  return reset($aMdSubvariants);
141 
142  return null;
143  }
144 
152  public function getMdSubvariantByName($sName)
153  {
154  $aSubvariants = $this->getMdSubvariants();
155  foreach ($aSubvariants as $oMdSubvariant) {
156  if (strcasecmp($oMdSubvariant->getName(), $sName) == 0)
157  return $oMdSubvariant;
158  }
159 
160  $oNewSubvariant = oxNew("oxMdVariant");
161  $oNewSubvariant->setName($sName);
162  $oNewSubvariant->setId(md5($sName.$this->getId()));
163  $oNewSubvariant->setParentId($this->getId());
164  $this->_addMdSubvariant($oNewSubvariant);
165 
166  return $oNewSubvariant;
167  }
168 
174  public function getLink()
175  {
176  $oFirstSubvariant = $this->getFirstMdSubvariant();
177  if ($oFirstSubvariant)
178  return $oFirstSubvariant->getLink();
179 
180  return $this->_sUrl;
181  }
182 
190  public function setName($sName)
191  {
192  $this->_sName = $sName;
193  }
194 
200  public function getName()
201  {
202  return $this->_sName;
203  }
204 
210  public function getDPrice()
211  {
212  return $this->_dPrice;
213  }
214 
220  public function getMinDPrice()
221  {
222  $dMinPrice = $this->getDPrice();
223  $aVariants = $this->getMdSubvariants();
224  foreach ($aVariants as $oVariant) {
225  $dMinVariantPrice = $oVariant->getMinDPrice();
226  if (is_null($dMinPrice)) {
227  $dMinPrice = $dMinVariantPrice;
228  }
229  if (!is_null($dMinVariantPrice) && $dMinVariantPrice < $dMinPrice) {
230  $dMinPrice = $dMinVariantPrice;
231  }
232  }
233  return $dMinPrice;
234 
235  }
236 
242  public function getMaxDepth()
243  {
244  $aSubvariants = $this->getMdSubvariants();
245 
246  if (!count($aSubvariants))
247  return 0;
248 
249  $iMaxDepth = 0;
250  foreach ($aSubvariants as $oSubvariant) {
251  if ($oSubvariant->getMaxDepth() > $iMaxDepth) {
252  $iMaxDepth = $oSubvariant->getMaxDepth();
253  }
254  }
255 
256  return $iMaxDepth + 1;
257  }
258 
264  public function getFPrice()
265  {
266  $myConfig = $this->getConfig();
267  // 0002030 No need to return price if it disabled for better performance.
268  if ( !$myConfig->getConfigParam( 'bl_perfLoadPrice' ) ) {
269  return;
270  }
271 
272  if ($this->_sFPrice)
273  return $this->_sFPrice;
274 
275  $sFromPrefix = '';
276 
277  if (!$this->_isFixedPrice()) {
278  $sFromPrefix = oxRegistry::getLang()->translateString('PRICE_FROM') . ' ';
279  }
280 
281  $dMinPrice = $this->getMinDPrice();
282  $sFMinPrice = oxRegistry::getLang()->formatCurrency( $dMinPrice );
283  $sCurrency = ' '.$this->getConfig()->getActShopCurrencyObject()->sign;
284  $this->_sFPrice = $sFromPrefix . $sFMinPrice . $sCurrency;
285 
286  return $this->_sFPrice;
287  }
288 
299  public function addNames($sArtId, $aNames, $dPrice, $sUrl)
300  {
301  $iCount = count($aNames);
302  $sName = array_shift($aNames);
303 
304  if ($iCount) {
305  //get required subvariant
306  $oVariant = $this->getMdSubvariantByName($sName);
307  //add remaining names
308  $oVariant->addNames($sArtId, $aNames, $dPrice, $sUrl);
309  } else {
310  //means we have the deepest element and assign other attributes
311  $this->_sArticleId = $sArtId;
312  $this->_dPrice = $dPrice;
313  $this->_sUrl = $sUrl;
314  }
315  }
316 
322  public function getArticleId()
323  {
324  $oFirstSubvariant = $this->getFirstMdSubvariant();
325 
326  if ($oFirstSubvariant)
327  return $oFirstSubvariant->getArticleId();
328 
329  return $this->_sArticleId;
330  }
331 
339  public function hasArticleId($sArtId)
340  {
341  if ($this->getArticleId() == $sArtId)
342  return true;
343 
344  $aSubvariants = $this->getMdSubvariants();
345  foreach ($aSubvariants as $oSubvariant) {
346  if ($oSubvariant->hasArticleId($sArtId))
347  return true;
348  }
349 
350  return false;
351  }
352 
360  protected function _addMdSubvariant($oSubvariant)
361  {
362  $this->_aSubvariants[$oSubvariant->getId()] = $oSubvariant;
363  }
364 
370  protected function _isFixedPrice()
371  {
372  $dPrice = $this->getDPrice();
373  $aVariants = $this->getMdSubvariants();
374  foreach ($aVariants as $oVariant) {
375  $dVariantPrice = $oVariant->getDPrice();
376  if (is_null($dPrice)) {
377  $dPrice = $dVariantPrice;
378  }
379  if (!is_null($dVariantPrice) && $dVariantPrice != $dPrice) {
380  return false;
381  }
382  if (!$oVariant->_isFixedPrice()) {
383  return false;
384  }
385  }
386  return true;
387  }
388 
389 }