review.php

Go to the documentation of this file.
00001 <?php
00002 
00007 class Review extends Details
00008 {
00013     protected $_oRevUser = null;
00014 
00019     protected $_oActObject = null;
00020 
00025     protected $_oActiveRecommList = null;
00026 
00031     protected $_oActiveRecommItems = null;
00032 
00037     protected $_blRate = null;
00038 
00043     protected $_aReviews = null;
00044 
00049     protected $_oCrossSelling = null;
00050 
00055     protected $_oSimilarProducts = null;
00056 
00061     protected $_oRecommList = null;
00062 
00067     protected $_blReviewSendStatus = null;
00068 
00073     protected $_oPageNavigation = null;
00074 
00079     protected $_sThisTemplate = 'page/review/review.tpl';
00080 
00085     protected $_sThisLoginTemplate = 'page/review/review_login.tpl';
00086 
00092     protected $_iViewIndexState = VIEW_INDEXSTATE_NOINDEXNOFOLLOW;
00093 
00099     public function getViewId()
00100     {
00101         return oxUBase::getViewId();
00102     }
00103 
00109     public function init()
00110     {
00111         if ( oxConfig::getParameter( 'recommid' ) && !$this->getActiveRecommList() ) {
00112             oxRegistry::getUtils()->redirect( $this->getConfig()->getShopHomeURL(), true, 302 );
00113         }
00114 
00115         oxUBase::init();
00116     }
00117 
00126     public function render()
00127     {
00128         $oConfig = $this->getConfig();
00129 
00130         if ( !$oConfig->getConfigParam( "bl_perfLoadReviews" ) ) {
00131             oxRegistry::getUtils()->redirect( $oConfig->getShopHomeURL() );
00132         }
00133 
00134         oxUBase::render();
00135         if ( ! ( $this->getReviewUser() ) ) {
00136             $this->_sThisTemplate = $this->_sThisLoginTemplate;
00137         } else {
00138 
00139             $oActiveRecommList = $this->getActiveRecommList();
00140             $oList = $this->getActiveRecommItems();
00141 
00142             if ( $oActiveRecommList ) {
00143                 if ( $oList && $oList->count()) {
00144                     $this->_iAllArtCnt = $oActiveRecommList->getArtCount();
00145                 }
00146                 // load only lists which we show on screen
00147                 $iNrofCatArticles = $this->getConfig()->getConfigParam( 'iNrofCatArticles' );
00148                 $iNrofCatArticles = $iNrofCatArticles ? $iNrofCatArticles : 10;
00149                 $this->_iCntPages  = round( $this->_iAllArtCnt / $iNrofCatArticles + 0.49 );
00150             }
00151         }
00152 
00153         return $this->_sThisTemplate;
00154     }
00155 
00161     public function saveReview()
00162     {
00163         if ( ( $oRevUser = $this->getReviewUser() ) && $this->canAcceptFormData() ) {
00164 
00165             if ( ( $oActObject = $this->_getActiveObject() ) && ( $sType = $this->_getActiveType() ) ) {
00166 
00167                 if ( ( $dRating = oxConfig::getParameter( 'rating' ) ) === null ) {
00168                     $dRating = oxConfig::getParameter( 'artrating' );
00169                 }
00170 
00171                 if ( $dRating !== null ) {
00172                     $dRating = (int) $dRating;
00173                 }
00174 
00175                 //save rating
00176                 if ( $dRating !== null && $dRating >= 1 && $dRating <= 5 ) {
00177                     $oRating = oxNew( 'oxrating' );
00178                     if ( $oRating->allowRating( $oRevUser->getId(), $sType, $oActObject->getId() ) ) {
00179                         $oRating->oxratings__oxuserid   = new oxField( $oRevUser->getId() );
00180                         $oRating->oxratings__oxtype     = new oxField( $sType );
00181                         $oRating->oxratings__oxobjectid = new oxField( $oActObject->getId() );
00182                         $oRating->oxratings__oxrating   = new oxField( $dRating );
00183                         $oRating->save();
00184 
00185                         $oActObject->addToRatingAverage( $dRating);
00186 
00187                         $this->_blReviewSendStatus = true;
00188                     }
00189                 }
00190 
00191                 if ( ( $sReviewText = trim( ( string ) oxConfig::getParameter( 'rvw_txt', true ) ) ) ) {
00192                     $oReview = oxNew( 'oxreview' );
00193                     $oReview->oxreviews__oxobjectid = new oxField( $oActObject->getId() );
00194                     $oReview->oxreviews__oxtype     = new oxField( $sType );
00195                     $oReview->oxreviews__oxtext     = new oxField( $sReviewText, oxField::T_RAW );
00196                     $oReview->oxreviews__oxlang     = new oxField( oxRegistry::getLang()->getBaseLanguage() );
00197                     $oReview->oxreviews__oxuserid   = new oxField( $oRevUser->getId() );
00198                     $oReview->oxreviews__oxrating   = new oxField( ( $dRating !== null ) ? $dRating : null );
00199                     $oReview->save();
00200 
00201                     $this->_blReviewSendStatus = true;
00202                 }
00203             }
00204         }
00205     }
00206 
00212     public function getReviewUser()
00213     {
00214         if ( $this->_oRevUser === null ) {
00215             $this->_oRevUser = false;
00216             $oUser = oxNew( "oxuser" );
00217 
00218             if ( $sUserId = $oUser->getReviewUserId( $this->getReviewUserHash() ) ) {
00219                 // review user, by link or other source?
00220                 if ( $oUser->load( $sUserId ) ) {
00221                     $this->_oRevUser = $oUser;
00222                 }
00223             } elseif ( $oUser = $this->getUser() ) {
00224                 // session user?
00225                 $this->_oRevUser = $oUser;
00226             }
00227 
00228         }
00229         return $this->_oRevUser;
00230     }
00231 
00237     public function getReviewUserHash()
00238     {
00239         return oxConfig::getParameter( 'reviewuserhash' );
00240     }
00241 
00247     protected function _getActiveObject()
00248     {
00249         if ( $this->_oActObject === null ) {
00250             $this->_oActObject = false;
00251 
00252             if ( ( $oProduct = $this->getProduct() ) ) {
00253                 $this->_oActObject = $oProduct;
00254             } elseif ( ( $oRecommList = $this->getActiveRecommList() ) ) {
00255                 $this->_oActObject = $oRecommList;
00256             }
00257         }
00258         return $this->_oActObject;
00259     }
00260 
00266     protected function _getActiveType()
00267     {
00268         $sType = null;
00269         if ( $this->getProduct() ) {
00270             $sType = 'oxarticle';
00271         } elseif ( $this->getActiveRecommList() ) {
00272             $sType = 'oxrecommlist';
00273         }
00274         return $sType;
00275     }
00276 
00282     public function getActiveRecommList()
00283     {
00284         if (!$this->getViewConfig()->getShowListmania()) {
00285             return false;
00286         }
00287 
00288         if ( $this->_oActiveRecommList === null ) {
00289             $this->_oActiveRecommList = false;
00290 
00291             if ( $sRecommId = oxConfig::getParameter( 'recommid' ) ) {
00292                 $oActiveRecommList = oxNew('oxrecommlist');
00293                 if ( $oActiveRecommList->load( $sRecommId ) ) {
00294                     $this->_oActiveRecommList = $oActiveRecommList;
00295                 }
00296             }
00297         }
00298         return $this->_oActiveRecommList;
00299     }
00300 
00306     public function canRate()
00307     {
00308         if ( $this->_blRate === null ) {
00309             $this->_blRate = false;
00310             if ( ( $oActObject = $this->_getActiveObject() ) && ( $oRevUser = $this->getReviewUser() ) ) {
00311                 $oRating = oxNew( 'oxrating' );
00312                 $this->_blRate = $oRating->allowRating( $oRevUser->getId(), $this->_getActiveType(), $oActObject->getId() );
00313             }
00314         }
00315         return $this->_blRate;
00316     }
00317 
00323     public function getReviews()
00324     {
00325         if ( $this->_aReviews === null ) {
00326             $this->_aReviews = false;
00327             if ( $oObject = $this->_getActiveObject() ) {
00328                 $this->_aReviews = $oObject->getReviews();
00329             }
00330         }
00331         return $this->_aReviews;
00332     }
00333 
00339     public function getRecommList()
00340     {
00341         if ( $this->_oRecommList === null ) {
00342             $this->_oRecommList = false;
00343             if ( $oProduct = $this->getProduct() ) {
00344                 $oRecommList = oxNew('oxrecommlist');
00345                 $this->_oRecommList = $oRecommList->getRecommListsByIds( array( $oProduct->getId() ) );
00346             }
00347         }
00348         return $this->_oRecommList;
00349     }
00350 
00356     public function getActiveRecommItems()
00357     {
00358         if ( $this->_oActiveRecommItems === null ) {
00359             $this->_oActiveRecommItems = false;
00360             if ( $oActiveRecommList = $this->getActiveRecommList()) {
00361                 // sets active page
00362                 $iActPage = (int) oxConfig::getParameter( 'pgNr' );
00363                 $iActPage = ($iActPage < 0) ? 0 : $iActPage;
00364 
00365                 // load only lists which we show on screen
00366                 $iNrofCatArticles = $this->getConfig()->getConfigParam( 'iNrofCatArticles' );
00367                 $iNrofCatArticles = $iNrofCatArticles ? $iNrofCatArticles : 10;
00368 
00369                 $oList = $oActiveRecommList->getArticles($iNrofCatArticles * $iActPage, $iNrofCatArticles);
00370 
00371                 if ( $oList && $oList->count() ) {
00372                     foreach ( $oList as $oItem) {
00373                         $oItem->text = $oActiveRecommList->getArtDescription( $oItem->getId() );
00374                     }
00375                     $this->_oActiveRecommItems = $oList;
00376                 }
00377             }
00378         }
00379         return $this->_oActiveRecommItems;
00380     }
00381 
00387     public function getReviewSendStatus()
00388     {
00389         return $this->_blReviewSendStatus;
00390     }
00391 
00397     public function getPageNavigation()
00398     {
00399         if ( $this->_oPageNavigation === null ) {
00400             $this->_oPageNavigation = false;
00401             if ( $this->getActiveRecommList() ) {
00402                 $this->_oPageNavigation = $this->generatePageNavigation();
00403             }
00404         }
00405         return $this->_oPageNavigation;
00406     }
00407 
00413     public function getAdditionalParams()
00414     {
00415         $sAddParams = oxUBase::getAdditionalParams();
00416         if ( $oActRecommList = $this->getActiveRecommList() ) {
00417             $sAddParams .= '&amp;recommid='.$oActRecommList->getId();
00418         }
00419         return $sAddParams;
00420     }
00421 
00427     public function getDynUrlParams()
00428     {
00429         $sParams = parent::getDynUrlParams();
00430 
00431         if ( $sCnId = oxConfig::getParameter( 'cnid' ) ) {
00432             $sParams .= "&amp;cnid={$sCnId}";
00433         }
00434         if ( $sAnId = oxConfig::getParameter( 'anid' ) ) {
00435             $sParams .= "&amp;anid={$sAnId}";
00436         }
00437         if ( $sListType = oxConfig::getParameter( 'listtype' ) ) {
00438             $sParams .= "&amp;listtype={$sListType}";
00439         }
00440         if ( $sRecommId = oxConfig::getParameter( 'recommid' ) ) {
00441             $sParams .= "&amp;recommid={$sRecommId}";
00442         }
00443 
00444         return $sParams;
00445     }
00446 }