OXID eShop CE  4.9.7
 All Classes Files Functions Variables Pages
oxmdvariant.php
Go to the documentation of this file.
1 <?php
2 
7 class oxMdVariant extends oxSuperCfg
8 {
9 
15  protected $_sId;
16 
22  protected $_sParentId;
23 
29  protected $_sArticleId;
30 
36  protected $_sName;
37 
43  protected $_sUrl;
44 
50  protected $_dPrice = null;
51 
57  protected $_sFPrice;
58 
64  protected $_aSubvariants = array();
65 
71  public function setId($sId)
72  {
73  $this->_sId = $sId;
74  }
75 
81  public function getId()
82  {
83  return $this->_sId;
84  }
85 
91  public function setParentId($sParentId)
92  {
93  $this->_sParentId = $sParentId;
94  }
95 
101  public function getParentId()
102  {
103  return $this->_sParentId;
104  }
105 
111  public function setMdSubvariants($aSubvariants)
112  {
113  $this->_aSubvariants = $aSubvariants;
114  }
115 
121  public function getMdSubvariants()
122  {
123  return $this->_aSubvariants;
124  }
125 
131  public function getFirstMdSubvariant()
132  {
133  $aMdSubvariants = $this->getMdSubvariants();
134  if (count($aMdSubvariants)) {
135  return reset($aMdSubvariants);
136  }
137 
138  return null;
139  }
140 
148  public function getMdSubvariantByName($sName)
149  {
150  $aSubvariants = $this->getMdSubvariants();
151  foreach ($aSubvariants as $oMdSubvariant) {
152  if (strcasecmp($oMdSubvariant->getName(), $sName) == 0) {
153  return $oMdSubvariant;
154  }
155  }
156 
157  $oNewSubvariant = oxNew("oxMdVariant");
158  $oNewSubvariant->setName($sName);
159  $oNewSubvariant->setId(md5($sName . $this->getId()));
160  $oNewSubvariant->setParentId($this->getId());
161  $this->_addMdSubvariant($oNewSubvariant);
162 
163  return $oNewSubvariant;
164  }
165 
171  public function getLink()
172  {
173  $oFirstSubvariant = $this->getFirstMdSubvariant();
174  if ($oFirstSubvariant) {
175  return $oFirstSubvariant->getLink();
176  }
177 
178  return $this->_sUrl;
179  }
180 
186  public function setName($sName)
187  {
188  $this->_sName = $sName;
189  }
190 
196  public function getName()
197  {
198  return $this->_sName;
199  }
200 
206  public function getDPrice()
207  {
208  return $this->_dPrice;
209  }
210 
216  public function getMinDPrice()
217  {
218  $dMinPrice = $this->getDPrice();
219  $aVariants = $this->getMdSubvariants();
220  foreach ($aVariants as $oVariant) {
221  $dMinVariantPrice = $oVariant->getMinDPrice();
222  if (is_null($dMinPrice)) {
223  $dMinPrice = $dMinVariantPrice;
224  }
225  if (!is_null($dMinVariantPrice) && $dMinVariantPrice < $dMinPrice) {
226  $dMinPrice = $dMinVariantPrice;
227  }
228  }
229 
230  return $dMinPrice;
231 
232  }
233 
239  public function getMaxDepth()
240  {
241  $aSubvariants = $this->getMdSubvariants();
242 
243  if (!count($aSubvariants)) {
244  return 0;
245  }
246 
247  $iMaxDepth = 0;
248  foreach ($aSubvariants as $oSubvariant) {
249  if ($oSubvariant->getMaxDepth() > $iMaxDepth) {
250  $iMaxDepth = $oSubvariant->getMaxDepth();
251  }
252  }
253 
254  return $iMaxDepth + 1;
255  }
256 
262  public function getFPrice()
263  {
264  $myConfig = $this->getConfig();
265  // 0002030 No need to return price if it disabled for better performance.
266  if (!$myConfig->getConfigParam('bl_perfLoadPrice')) {
267  return;
268  }
269 
270  if ($this->_sFPrice) {
271  return $this->_sFPrice;
272  }
273 
274  $sFromPrefix = '';
275 
276  if (!$this->_isFixedPrice()) {
277  $sFromPrefix = oxRegistry::getLang()->translateString('PRICE_FROM') . ' ';
278  }
279 
280  $dMinPrice = $this->getMinDPrice();
281  $sFMinPrice = oxRegistry::getLang()->formatCurrency($dMinPrice);
282  $sCurrency = ' ' . $this->getConfig()->getActShopCurrencyObject()->sign;
283  $this->_sFPrice = $sFromPrefix . $sFMinPrice . $sCurrency;
284 
285  return $this->_sFPrice;
286  }
287 
296  public function addNames($sArtId, $aNames, $dPrice, $sUrl)
297  {
298  $iCount = count($aNames);
299  $sName = array_shift($aNames);
300 
301  if ($iCount) {
302  //get required subvariant
303  $oVariant = $this->getMdSubvariantByName($sName);
304  //add remaining names
305  $oVariant->addNames($sArtId, $aNames, $dPrice, $sUrl);
306  } else {
307  //means we have the deepest element and assign other attributes
308  $this->_sArticleId = $sArtId;
309  $this->_dPrice = $dPrice;
310  $this->_sUrl = $sUrl;
311  }
312  }
313 
319  public function getArticleId()
320  {
321  $oFirstSubvariant = $this->getFirstMdSubvariant();
322 
323  if ($oFirstSubvariant) {
324  return $oFirstSubvariant->getArticleId();
325  }
326 
327  return $this->_sArticleId;
328  }
329 
337  public function hasArticleId($sArtId)
338  {
339  if ($this->getArticleId() == $sArtId) {
340  return true;
341  }
342 
343  $aSubvariants = $this->getMdSubvariants();
344  foreach ($aSubvariants as $oSubvariant) {
345  if ($oSubvariant->hasArticleId($sArtId)) {
346  return true;
347  }
348  }
349 
350  return false;
351  }
352 
358  protected function _addMdSubvariant($oSubvariant)
359  {
360  $this->_aSubvariants[$oSubvariant->getId()] = $oSubvariant;
361  }
362 
368  protected function _isFixedPrice()
369  {
370  $dPrice = $this->getDPrice();
371  $aVariants = $this->getMdSubvariants();
372  foreach ($aVariants as $oVariant) {
373  $dVariantPrice = $oVariant->getDPrice();
374  if (is_null($dPrice)) {
375  $dPrice = $dVariantPrice;
376  }
377  if (!is_null($dVariantPrice) && $dVariantPrice != $dPrice) {
378  return false;
379  }
380  if (!$oVariant->_isFixedPrice()) {
381  return false;
382  }
383  }
384 
385  return true;
386  }
387 }