recommlist.php

Go to the documentation of this file.
00001 <?php
00002 
00008 class RecommList extends aList
00009 {
00014     protected $_sListType = 'recommlist';
00015 
00020     protected $_sThisTemplate = 'recommlist.tpl';
00021 
00026     protected $_oOtherRecommList = null;
00027 
00032     protected $_aReviews = null;
00033 
00038     protected $_blRate = null;
00039 
00044     protected $_dRatingValue = null;
00045 
00050     protected $_iRatingCnt = null;
00051 
00056     protected $_oSearchRecommLists = null;
00057 
00062     protected $_sSearch = null;
00063 
00069     protected $_sTplLocation = null;
00070 
00075     protected $_oPageNavigation = null;
00076 
00082     public function render()
00083     {
00084         oxUBase::render();
00085         $myConfig = $this->getConfig();
00086 
00087         $this->_iAllArtCnt = 0;
00088         $this->_aViewData['actvrecommlist'] = $this->getActiveRecommList();
00089         $this->_aViewData['itemList'] = $this->getArticleList();
00090 
00091         // loading other recommlists
00092         $this->_aViewData['similarrecommlist'] = $this->getSimilarRecommLists();
00093 
00094         // Loads rating parameters
00095         $this->_aViewData['rate']      = $this->canRate();
00096         $this->_aViewData['rating']    = $this->getRatingValue();
00097         $this->_aViewData['ratingcnt'] = $this->getRatingCount();
00098         $this->_aViewData['reviews']   = $this->getReviews();
00099 
00100         // list of found oxrecommlists
00101         $this->_aViewData['recommlists'] = $this->getRecommLists();
00102         if ( $oActiveRecommList = $this->getActiveRecommList() ) {
00103             if ( ( $oList = $this->getArticleList() ) && $oList->count()) {
00104                 $this->_iAllArtCnt = $oActiveRecommList->getArtCount();
00105             }
00106 
00107             if ( $myConfig->getConfigParam( 'bl_rssRecommListArts' ) ) {
00108                 $oRss = oxNew('oxrssfeed');
00109                 $this->addRssFeed($oRss->getRecommListArticlesTitle($oActiveRecommList), $oRss->getRecommListArticlesUrl($this->_oActiveRecommList), 'recommlistarts');
00110             }
00111 
00112         } else {
00113             if ( ( $oList = $this->getRecommLists() ) && $oList->count() ) {
00114                 $oRecommList = oxNew( 'oxrecommlist' );
00115                 $this->_iAllArtCnt = $oRecommList->getSearchRecommListCount( $this->getRecommSearch() );
00116             }
00117         }
00118 
00119         if ( !( $oList = $this->getArticleList() ) ) {
00120             $oList = $this->getRecommLists();
00121         }
00122 
00123         if ( $oList && $oList->count() ) {
00124             $iNrofCatArticles = (int) $this->getConfig()->getConfigParam( 'iNrofCatArticles' );
00125             $iNrofCatArticles = $iNrofCatArticles ? $iNrofCatArticles : 10;
00126             $this->_iCntPages  = round( $this->_iAllArtCnt / $iNrofCatArticles + 0.49 );
00127         }
00128 
00129         $this->_aViewData['pageNavigation'] = $this->getPageNavigation();
00130         $this->_aViewData['template_location']   = $this->getTemplateLocation();
00131         $this->_aViewData['searchrecomm']        = $this->getRecommSearch();
00132         $this->_aViewData['searchrecommforhtml'] = $this->getSearchForHtml();
00133 
00134         $this->_aViewData['loginformanchor'] = $this->getLoginFormAnchor();
00135 
00136         // processing list articles
00137         $this->_processListArticles();
00138 
00139         return $this->_sThisTemplate;
00140     }
00141 
00147     protected function _getProductLinkType()
00148     {
00149         return OXARTICLE_LINKTYPE_RECOMM;
00150     }
00151 
00157     public function getAddUrlParams()
00158     {
00159         $sAddParams  = parent::getAddUrlParams();
00160         $sAddParams .= ($sAddParams?'&amp;':'') . "listtype={$this->_sListType}";
00161 
00162         if ( $oRecommList = $this->getActiveRecommList() ) {
00163             $sAddParams .= "&amp;recommid=".$oRecommList->getId();
00164         }
00165 
00166         return $sAddParams;
00167     }
00168 
00174     public function getAddSeoUrlParams()
00175     {
00176         $sAddParams = parent::getAddSeoUrlParams();
00177         if ( $sParam = oxConfig::getParameter( "searchrecomm", true ) ) {
00178             $sAddParams .= "&amp;searchrecomm=" . rawurlencode( $sParam );
00179         }
00180         return $sAddParams;
00181     }
00182 
00188     public function saveReview()
00189     {
00190         if ( $this->canAcceptFormData() &&
00191              ( $oRecommList = $this->getActiveRecommList() ) && ( $oUser = $this->getUser() ) ) {
00192 
00193             //save rating
00194             $dRating = oxConfig::getParameter( 'recommlistrating' );
00195             if ( $dRating !== null ) {
00196                 $dRating = (int) $dRating;
00197             }
00198 
00199             if ( $dRating !== null && $dRating >= 0 && $dRating <= 5 ) {
00200                 $oRating = oxNew( 'oxrating' );
00201                 if ( $oRating->allowRating( $oUser->getId(), 'oxrecommlist', $oRecommList->getId() ) ) {
00202                     $oRating->oxratings__oxuserid   = new oxField( $oUser->getId() );
00203                     $oRating->oxratings__oxtype     = new oxField( 'oxrecommlist' );
00204                     $oRating->oxratings__oxobjectid = new oxField( $oRecommList->getId() );
00205                     $oRating->oxratings__oxrating   = new oxField( $dRating );
00206                     $oRating->save();
00207                     $oRecommList->addToRatingAverage( $dRating );
00208                 }
00209             }
00210 
00211             if ( ( $sReviewText = trim( ( string ) oxConfig::getParameter( 'rvw_txt', true ) ) ) ) {
00212                 $oReview = oxNew( 'oxreview' );
00213                 $oReview->oxreviews__oxobjectid = new oxField( $oRecommList->getId() );
00214                 $oReview->oxreviews__oxtype     = new oxField( 'oxrecommlist' );
00215                 $oReview->oxreviews__oxtext     = new oxField( $sReviewText, oxField::T_RAW );
00216                 $oReview->oxreviews__oxlang     = new oxField( oxLang::getInstance()->getBaseLanguage() );
00217                 $oReview->oxreviews__oxuserid   = new oxField( $oUser->getId() );
00218                 $oReview->oxreviews__oxrating   = new oxField( ( $dRating !== null ) ? $dRating : null );
00219                 $oReview->save();
00220             }
00221         }
00222     }
00223 
00231     public function showLogin()
00232     {
00233         $this->_sThisTemplate = 'account_login.tpl';
00234         $this->_sLoginFormAnchor = "review";
00235     }
00236 
00242     public function getNavigationParams()
00243     {
00244         $aParams = oxUBase::getNavigationParams();
00245         $aParams['recommid'] = oxConfig::getParameter( 'recommid' );
00246 
00247         return $aParams;
00248     }
00249 
00257     public function getActiveRecommItems()
00258     {
00259         return $this->getArticleList();
00260     }
00261 
00267     public function getArticleList()
00268     {
00269         if ( $this->_aArticleList === null ) {
00270             $this->_aArticleList = false;
00271             if ( $oActiveRecommList = $this->getActiveRecommList()) {
00272                 // sets active page
00273                 $iActPage = (int) oxConfig::getParameter( 'pgNr' );
00274                 $iActPage = ($iActPage < 0) ? 0 : $iActPage;
00275 
00276                 // load only lists which we show on screen
00277                 $iNrofCatArticles = $this->getConfig()->getConfigParam( 'iNrofCatArticles' );
00278                 $iNrofCatArticles = $iNrofCatArticles ? $iNrofCatArticles : 10;
00279 
00280                 $this->_aArticleList = $oActiveRecommList->getArticles($iNrofCatArticles * $iActPage, $iNrofCatArticles);
00281 
00282                 if ( $this->_aArticleList && $this->_aArticleList->count() ) {
00283                     foreach ( $this->_aArticleList as $oItem ) {
00284                         $oItem->text = $oActiveRecommList->getArtDescription( $oItem->getId() );
00285                     }
00286                 }
00287             }
00288         }
00289         return $this->_aArticleList;
00290     }
00291 
00297     public function getSimilarRecommLists()
00298     {
00299         if ( $this->_oOtherRecommList === null ) {
00300             $this->_oOtherRecommList = false;
00301             if ( ( $oActiveRecommList = $this->getActiveRecommList() ) && ( $oList = $this->getArticleList() ) ) {
00302                 $oRecommLists = $oActiveRecommList->getRecommListsByIds( $oList->arrayKeys());
00303                 //do not show the same list
00304                 unset( $oRecommLists[$oActiveRecommList->getId()] );
00305                 $this->_oOtherRecommList = $oRecommLists;
00306             }
00307         }
00308         return $this->_oOtherRecommList;
00309     }
00310 
00318     public function getRecommId()
00319     {
00320         return oxConfig::getParameter( 'recommid' );
00321     }
00322 
00328     public function getReviews()
00329     {
00330         if ( $this->_aReviews === null ) {
00331             $this->_aReviews = false;
00332             if ( $this->isReviewActive() && ( $oActiveRecommList = $this->getActiveRecommList() ) ) {
00333                 $this->_aReviews = $oActiveRecommList->getReviews();
00334             }
00335         }
00336         return $this->_aReviews;
00337     }
00338 
00344     public function isReviewActive()
00345     {
00346         return $this->getConfig()->getConfigParam( 'bl_perfLoadReviews' );
00347     }
00348 
00354     public function canRate()
00355     {
00356         if ( $this->_blRate === null ) {
00357             $this->_blRate = false;
00358             if ( $this->isReviewActive() && ( $oActiveRecommList = $this->getActiveRecommList() ) ) {
00359                 $oRating = oxNew( 'oxrating' );
00360                 $this->_blRate = $oRating->allowRating( oxSession::getVar( 'usr' ), 'oxrecommlist', $oActiveRecommList->getId());
00361             }
00362         }
00363         return $this->_blRate;
00364     }
00365 
00371     public function getRatingValue()
00372     {
00373         if ( $this->_dRatingValue === null ) {
00374             $this->_dRatingValue = (double)0;
00375             if ( $this->isReviewActive() && ( $oActiveRecommList = $this->getActiveRecommList() ) ) {
00376                 $this->_dRatingValue = round( $oActiveRecommList->oxrecommlists__oxrating->value, 1);
00377             }
00378         }
00379         return (double) $this->_dRatingValue;
00380     }
00381 
00387     public function getRatingCount()
00388     {
00389         if ( $this->_iRatingCnt === null ) {
00390             $this->_iRatingCnt = false;
00391             if ( $this->isReviewActive() && ( $oActiveRecommList = $this->getActiveRecommList() ) ) {
00392                 $this->_iRatingCnt = $oActiveRecommList->oxrecommlists__oxratingcnt->value;
00393             }
00394         }
00395         return $this->_iRatingCnt;
00396     }
00397 
00403     public function getRecommLists()
00404     {
00405         if ( $this->_oSearchRecommLists === null ) {
00406             $this->_oSearchRecommLists = array();
00407             if ( !$this->getActiveRecommList() ) {
00408                 // list of found oxrecommlists
00409                 $oRecommList = oxNew( 'oxrecommlist' );
00410                 $oList = $oRecommList->getSearchRecommLists( $this->getRecommSearch() );
00411                 if ( $oList && $oList->count() ) {
00412                     $this->_oSearchRecommLists = $oList;
00413                 }
00414             }
00415         }
00416         return $this->_oSearchRecommLists;
00417     }
00418 
00424     public function getRecommSearch()
00425     {
00426         if ( $this->_sSearch === null ) {
00427             $this->_sSearch = false;
00428             if ( $sSearch = oxConfig::getParameter( 'searchrecomm', true ) ) {
00429                 $this->_sSearch = $sSearch;
00430             }
00431         }
00432         return $this->_sSearch;
00433     }
00434 
00442     public function getTemplateLocation()
00443     {
00444         if ( $this->_sTplLocation === null ) {
00445             $this->_sTplLocation = false;
00446             $oLang = oxLang::getInstance();
00447             if ( $sSearchparam = $this->getRecommSearch() ) {
00448                 $sUrl = $this->getConfig()->getShopHomeURL();
00449                 $sLink = "{$sUrl}cl=recommlist&amp;searchrecomm=".rawurlencode( $sSearchparam );
00450                 $sTitle = $oLang->translateString('RECOMMLIST');
00451                 $sTitle .= " / ".$oLang->translateString('RECOMMLIST_SEARCH').' "'.$sSearchparam.'"';
00452                 $this->_sTplLocation = "<a href='".$sLink."'>".$sTitle."</a>";
00453             } else {
00454                 $this->_sTplLocation = $oLang->translateString('RECOMMLIST');
00455             }
00456         }
00457         return $this->_sTplLocation;
00458     }
00459 
00465     public function getTreePath()
00466     {
00467         $oLang = oxLang::getInstance();
00468 
00469         $aPath[0] = oxNew( "oxcategory" );
00470         $aPath[0]->setLink( false );
00471         $aPath[0]->oxcategories__oxtitle = new oxField( $oLang->translateString('RECOMMLIST') );
00472 
00473         if ( $sSearchparam = $this->getRecommSearch() ) {
00474             $sUrl   = $this->getConfig()->getShopHomeURL()."cl=recommlist&amp;searchrecomm=".rawurlencode( $sSearchparam );
00475             $sTitle = $oLang->translateString('RECOMMLIST_SEARCH').' "'.$sSearchparam.'"';
00476 
00477             $aPath[1] = oxNew( "oxcategory" );
00478             $aPath[1]->setLink( $sUrl );
00479             $aPath[1]->oxcategories__oxtitle = new oxField( $sTitle );
00480         }
00481 
00482         return $aPath;
00483     }
00484 
00490     public function getSearchForHtml()
00491     {
00492         // #M1450 if active recommlist is loaded return it's title
00493         if ( $oActiveRecommList = $this->getActiveRecommList()) {
00494             return $oActiveRecommList->oxrecommlists__oxtitle->value;
00495         }
00496         return oxConfig::getParameter( 'searchrecomm' );
00497     }
00498 
00504     public function getLoginFormAnchor()
00505     {
00506         return $this->_sLoginFormAnchor;
00507     }
00508 
00514     public function generatePageNavigationUrl()
00515     {
00516         if ( ( oxUtils::getInstance()->seoIsActive() && ( $oRecomm = $this->getActiveRecommList() ) ) ) {
00517             $sUrl = $oRecomm->getLink();
00518         } else {
00519             $sUrl = oxUBase::generatePageNavigationUrl();
00520         }
00521         return $sUrl;
00522     }
00523 
00533     protected function _addPageNrParam( $sUrl, $iPage, $iLang = null)
00534     {
00535         if ( oxUtils::getInstance()->seoIsActive() && ( $oRecomm = $this->getActiveRecommList() ) ) {
00536             if ( $iPage ) {
00537                 // only if page number > 0
00538                 $sUrl = oxSeoEncoderRecomm::getInstance()->getRecommPageUrl( $oRecomm, $iPage, $iLang, true );
00539             }
00540         } else {
00541             $sUrl = oxUBase::_addPageNrParam( $sUrl, $iPage, $iLang );
00542         }
00543         return $sUrl;
00544     }
00545 
00551     public function getAdditionalParams()
00552     {
00553         $sAddParams = oxUBase::getAdditionalParams();
00554 
00555         if ( $oRecomm = $this->getActiveRecommList() ) {
00556             $sAddParams .= "&amp;recommid=".$oRecomm->getId();
00557         }
00558 
00559         if ( $sSearch = $this->getRecommSearch() ) {
00560             $sAddParams .= "&amp;searchrecomm=". rawurlencode( $sSearch );
00561         }
00562 
00563         return $sAddParams;
00564     }
00565 
00573     public function getLink( $iLang = null )
00574     {
00575         if ( $oRecomm = $this->getActiveRecommList() ) {
00576             $sLink = $oRecomm->getLink( $iLang );
00577         } else {
00578             $sLink = oxUBase::getLink( $iLang );
00579         }
00580         $sSearch = oxConfig::getParameter( 'searchrecomm' );
00581         if ( $sSearch ) {
00582             $sLink .= ( ( strpos( $sLink, '?' ) === false ) ? '?' : '&amp;' ) . "searchrecomm={$sSearch}";
00583         }
00584 
00585         return $sLink;
00586     }
00587 }