Go to the documentation of this file.00001 <?php
00002
00009 class oxUserBasket extends oxBase
00010 {
00011
00017 protected $_aSkipSaveFields = array('oxcreate');
00018
00024 protected $_sClassName = 'oxUserbasket';
00025
00031 protected $_aBasketItems = null;
00032
00038 protected $_blNewBasket = false;
00039
00045 public function __construct()
00046 {
00047 parent::__construct();
00048 $this->init( 'oxuserbaskets' );
00049 }
00050
00056 protected function _insert()
00057 {
00058
00059 $this->_blNewBasket = false;
00060
00061 if ( !isset( $this->oxuserbaskets__oxpublic->value ) ) {
00062 $this->oxuserbaskets__oxpublic = new oxField(1, oxField::T_RAW);
00063 }
00064
00065 $iTime = oxUtilsDate::getInstance()->getTime();
00066 $this->oxuserbaskets__oxcreate = new oxField( $iTime );
00067 $this->oxuserbaskets__oxupdate = new oxField( $iTime );
00068
00069 return parent::_insert();
00070 }
00071
00078 public function setIsNewBasket()
00079 {
00080 $this->_blNewBasket = true;
00081 $iTime = oxUtilsDate::getInstance()->getTime();
00082 $this->oxuserbaskets__oxcreate = new oxField( $iTime );
00083 $this->oxuserbaskets__oxupdate = new oxField( $iTime );
00084 }
00085
00091 public function isNewBasket()
00092 {
00093 return $this->_blNewBasket;
00094 }
00095
00101 public function isEmpty()
00102 {
00103 if ( $this->isNewBasket() || $this->getItemCount() < 1 ) {
00104 return true;
00105 }
00106
00107 return false;
00108 }
00109
00115 public function getArticles()
00116 {
00117 $aRes = array();
00118 $aItems = $this->getItems();
00119 if ( is_array( $aItems ) ) {
00120 foreach ( $aItems as $sId => $oItem ) {
00121 $oArticle = $oItem->getArticle( $sId );
00122 $aRes[$this->_getItemKey($oArticle->getId(), $oItem->getSelList())] = $oArticle;
00123 }
00124 }
00125 return $aRes;
00126 }
00127
00136 public function getItems( $blReload = false, $blActiveCheck = true )
00137 {
00138
00139 if ( $this->_aBasketItems !== null && !$blReload ) {
00140 return $this->_aBasketItems;
00141 }
00142
00143
00144 $this->_aBasketItems = array();
00145
00146
00147 $oArticle = oxNew( 'oxarticle' );
00148 $sViewName = $oArticle->getViewName();
00149
00150 $sSelect = "select oxuserbasketitems.* from oxuserbasketitems left join $sViewName on oxuserbasketitems.oxartid = $sViewName.oxid ";
00151 if ($blActiveCheck) {
00152 $sSelect .= 'and '.$oArticle->getSqlActiveSnippet().' ';
00153 }
00154 $sSelect .= "where oxuserbasketitems.oxbasketid = '".$this->getId()."' and $sViewName.oxid is not null ";
00155
00156 $oItems = oxNew( 'oxlist' );
00157 $oItems->init( 'oxuserbasketitem' );
00158 $oItems->selectstring( $sSelect );
00159
00160 foreach ( $oItems as $oItem ) {
00161 $sKey = $this->_getItemKey( $oItem->oxuserbasketitems__oxartid->value, $oItem->getSelList() );
00162 $this->_aBasketItems[$sKey] = $oItem;
00163 }
00164
00165 return $this->_aBasketItems;
00166 }
00167
00177 protected function _createItem( $sProductId, $aSelList = null )
00178 {
00179 $oNewItem = oxNew( 'oxuserbasketitem' );
00180 $oNewItem->oxuserbasketitems__oxartid = new oxField($sProductId, oxField::T_RAW);
00181 $oNewItem->oxuserbasketitems__oxbasketid = new oxField($this->getId(), oxField::T_RAW);
00182
00183 if ( !$aSelList ) {
00184 $oArticle = oxNew( 'oxArticle' );
00185 $oArticle->load( $sProductId );
00186 $aSelectLists = $oArticle->getSelectLists();
00187 if ( ( $iSelCnt = count( $aSelectLists ) ) ) {
00188 $aSelList = array_fill( 0, $iSelCnt, '0' );
00189 }
00190 }
00191
00192 $oNewItem->setSelList( $aSelList );
00193
00194 return $oNewItem;
00195 }
00196
00197
00207 public function getItem( $sProductId, $aSelList)
00208 {
00209
00210 $aItems = $this->getItems();
00211 $sItemKey = $this->_getItemKey( $sProductId, $aSelList );
00212
00213 $oItem = null;
00214
00215 if ( isset( $aItems[$sProductId] )) {
00216 $oItem = $aItems[$sProductId];
00217 } elseif ( isset( $aItems[$sItemKey] ) ) {
00218 $oItem = $aItems[$sItemKey];
00219 } else {
00220 $oItem = $this->_createItem( $sProductId, $aSelList );
00221 }
00222
00223 return $oItem;
00224 }
00225
00234 protected function _getItemKey( $sProductId, $aSel = null )
00235 {
00236 $aSel = ( $aSel != null) ? $aSel : array (0=>'0');
00237 return md5( $sProductId.'|'.serialize( $aSel ) );
00238 }
00239
00247 public function getItemCount( $blReload = false )
00248 {
00249 return count( $this->getItems( $blReload ) );
00250 }
00251
00263 public function addItemToBasket( $sProductId = null, $dAmount = null, $aSel = null, $blOverride = false )
00264 {
00265
00266 if ( $this->_blNewBasket ) {
00267 $this->save();
00268 }
00269
00270 if ( ( $oUserBasketItem = $this->getItem( $sProductId, $aSel ) ) ) {
00271
00272 if ( !$blOverride && !empty($oUserBasketItem->oxuserbasketitems__oxamount->value) ) {
00273 $dAmount += $oUserBasketItem->oxuserbasketitems__oxamount->value;
00274 }
00275
00276 if ( !$dAmount ) {
00277
00278 $oUserBasketItem->delete();
00279 if ( isset($this->_aBasketItems[$this->_getItemKey($sProductId, $aSel)])) {
00280 unset( $this->_aBasketItems[$this->_getItemKey($sProductId, $aSel)] );
00281 }
00282 } else {
00283 $oUserBasketItem->oxuserbasketitems__oxamount = new oxField($dAmount, oxField::T_RAW);
00284 $oUserBasketItem->save();
00285
00286 $this->_aBasketItems[$this->_getItemKey($sProductId, $aSel)] = $oUserBasketItem;
00287 }
00288
00289
00290 $this->oxuserbaskets__oxupdate = new oxField(oxUtilsDate::getInstance()->getTime());
00291 $this->save();
00292
00293 return $dAmount;
00294 }
00295 }
00296
00304 public function delete( $sOXID = null )
00305 {
00306 if ( !$sOXID ) {
00307 $sOXID = $this->getId();
00308 }
00309
00310 $blDelete = false;
00311 if ( $sOXID && ( $blDelete = parent::delete( $sOXID ) ) ) {
00312
00313 $sQ = "delete from oxuserbasketitems where oxbasketid = " . oxDb::getDb()->quote( $sOXID );
00314 oxDb::getDb()->execute( $sQ );
00315 }
00316 return $blDelete;
00317 }
00318
00324 public function isVisible()
00325 {
00326 $oActivUser = $this->getConfig()->getUser();
00327 $sActivUserId = null;
00328 if ($oActivUser)
00329 $sActivUserId = $oActivUser->getId();
00330
00331 $blIsVisible = (bool) ($this->oxuserbaskets__oxpublic->value) ||
00332 ($sActivUserId && ($this->oxuserbaskets__oxuserid->value == $sActivUserId));
00333
00334 return $blIsVisible;
00335 }
00336
00337 }