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
00125 $oVariant = $this->_getMdSubvariantByName($sName);
00126
00127 $oVariant->addNames($sArtId, $aNames, $dPrice, $sUrl);
00128 } else {
00129
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 }