oxmdvariant.php

Go to the documentation of this file.
00001 <?php
00002 
00007 class oxMdVariant extends oxSuperCfg
00008 {
00014     protected $_sId;
00015 
00021     protected $_sParentId;
00022 
00028     protected $_sArticleId;
00029 
00035     protected $_sName;
00036 
00042     protected $_sUrl;
00043 
00049     protected $_dPrice = null;
00050 
00056     protected $_sFPrice;
00057 
00063     protected $_aSubvariants = array();
00064 
00072     public function setId($sId)
00073     {
00074         $this->_sId = $sId;
00075     }
00076 
00082     public function getId()
00083     {
00084         return $this->_sId;
00085     }
00086 
00094     public function setParentId($sParentId)
00095     {
00096         $this->_sParentId = $sParentId;
00097     }
00098 
00104     public function getParentId()
00105     {
00106         return $this->_sParentId;
00107     }
00108 
00118     public function addNames($sArtId, $aNames, $dPrice, $sUrl)
00119     {
00120         $iCount = count($aNames);
00121         $sName = array_shift($aNames);
00122 
00123         if ($iCount) {
00124             //get required subvariant
00125             $oVariant = $this->_getMdSubvariantByName($sName);
00126             //add remaining names
00127             $oVariant->addNames($sArtId, $aNames, $dPrice, $sUrl);
00128         } else {
00129             //means we have the deepest element and assign other attributes
00130             $this->_sArticleId = $sArtId;
00131             $this->_dPrice = $dPrice;
00132             $this->_sUrl = $sUrl;
00133         }
00134     }
00135 
00143     public function setMdSubvariants($aSubvariants)
00144     {
00145         $this->_aSubvariants = $aSubvariants;
00146     }
00147 
00153     public function getArticleId()
00154     {
00155         $oFirstSubvariant = $this->getFirstMdSubvariant();
00156 
00157         if ($oFirstSubvariant)
00158             return $oFirstSubvariant->getArticleId();
00159 
00160         return $this->_sArticleId;
00161     }
00162 
00170     public function hasArticleId($sArtId)
00171     {
00172         if ($this->getArticleId() == $sArtId)
00173             return true;
00174 
00175         $aSubvariants = $this->getMdSubvariants();
00176         foreach ($aSubvariants as $oSubvariant) {
00177             if ($oSubvariant->hasArticleId($sArtId))
00178                 return true;
00179         }
00180 
00181         return false;
00182     }
00183 
00189     public function getLink()
00190     {
00191         $oFirstSubvariant = $this->getFirstMdSubvariant();
00192         if ($oFirstSubvariant)
00193             return $oFirstSubvariant->getLink();
00194 
00195         return $this->_sUrl;
00196     }
00197 
00203     public function setName($sName)
00204     {
00205         $this->_sName = $sName;
00206     }
00207 
00213     public function getName()
00214     {
00215         return $this->_sName;
00216     }
00217 
00223     public function getUrl()
00224     {
00225         return $this->_sUrl;
00226     }
00227 
00233     public function getDPrice()
00234     {
00235         return $this->_dPrice;
00236     }
00237 
00243     public function getMinDPrice()
00244     {
00245         $dMinPrice = $this->getDPrice();
00246         $aVariants = $this->getMdSubvariants();
00247         foreach ($aVariants as $oVariant) {
00248             $dMinVariantPrice = $oVariant->getMinDPrice();
00249             if (is_null($dMinPrice)) {
00250                 $dMinPrice = $dMinVariantPrice;
00251             }
00252             if (!is_null($dMinVariantPrice) && $dMinVariantPrice < $dMinPrice) {
00253                 $dMinPrice = $dMinVariantPrice;
00254             }
00255         }
00256         return $dMinPrice;
00257 
00258     }
00259 
00265     public function getMaxDepth()
00266     {
00267         $aSubvariants = $this->getMdSubvariants();
00268 
00269         if (!count($aSubvariants))
00270             return 0;
00271 
00272         $iMaxDepth = 0;
00273         foreach ($aSubvariants as $oSubvariant) {
00274             if ($oSubvariant->getMaxDepth() > $iMaxDepth) {
00275                 $iMaxDepth = $oSubvariant->getMaxDepth();
00276             }
00277         }
00278 
00279         return $iMaxDepth + 1;
00280     }
00281 
00287     public function getFPrice()
00288     {
00289         if ($this->_sFPrice)
00290             return $this->_sFPrice;
00291 
00292         $sFromPrefix = '';
00293 
00294         if (!$this->isFixedPrice()) {
00295             $sFromPrefix = oxLang::getInstance()->translateString('priceFrom') . ' ';
00296         }
00297 
00298         $dMinPrice = $this->getMinDPrice();
00299         $sFMinPrice = oxLang::getInstance()->formatCurrency( $dMinPrice );
00300         $sCurrency = ' '.$this->getConfig()->getActShopCurrencyObject()->sign;
00301         $this->_sFPrice = $sFromPrefix . $sFMinPrice . $sCurrency;
00302 
00303         return $this->_sFPrice;
00304     }
00305 
00311     public function getFirstMdSubvariant()
00312     {
00313         $aMdSubvariants = $this->getMdSubvariants();
00314         if (count($aMdSubvariants))
00315             return reset($aMdSubvariants);
00316 
00317         return null;
00318     }
00319 
00325     public function getMdSubvariants()
00326     {
00327         return $this->_aSubvariants;
00328     }
00329 
00337     protected function _getMdSubvariantByName($sName)
00338     {
00339         $aSubvariants = $this->getMdSubvariants();
00340         foreach ($aSubvariants as $oMdSubvariant) {
00341             if (strcasecmp($oMdSubvariant->getName(), $sName) == 0)
00342                 return $oMdSubvariant;
00343         }
00344 
00345         $oNewSubvariant = oxNew("oxMdVariant");
00346         $oNewSubvariant->setName($sName);
00347         $oNewSubvariant->setId(md5($sName.$this->getId()));
00348         $oNewSubvariant->setParentId($this->getId());
00349         $this->_addMdSubvariant($oNewSubvariant);
00350 
00351         return $oNewSubvariant;
00352     }
00353 
00362     protected function _addMdSubvariant($oSubvariant)
00363     {
00364         $this->_aSubvariants[$oSubvariant->getId()] = $oSubvariant;
00365     }
00366 
00372     protected function isFixedPrice()
00373     {
00374         $dPrice = $this->getDPrice();
00375         $aVariants = $this->getMdSubvariants();
00376         foreach ($aVariants as $oVariant) {
00377             $dVariantPrice = $oVariant->getDPrice();
00378             if (is_null($dPrice)) {
00379                 $dPrice = $dVariantPrice;
00380             }
00381             if (!is_null($dVariantPrice) && $dVariantPrice != $dPrice) {
00382                 return false;
00383             }
00384             if (!$oVariant->isFixedPrice()) {
00385                 return false;
00386             }
00387         }
00388         return true;
00389     }
00390 
00391 }

Generated on Mon Oct 26 20:07:16 2009 for OXID eShop CE by  doxygen 1.5.5