oxshop.php

Go to the documentation of this file.
00001 <?php
00002 
00008 class oxShop extends oxI18n
00009 {
00015     protected $_sClassName = 'oxshop';
00016 
00022     protected $_aMultiShopTables = array();
00023 
00024 
00028     public function __construct()
00029     {
00030         parent::__construct();
00031         $this->init( 'oxshops' );
00032     }
00033 
00041     public function setMultiShopTables( $aMultiShopTables )
00042     {
00043         $this->_aMultiShopTables = $aMultiShopTables;
00044     }
00045 
00046 
00055     public function generateViews( $blMultishopInheritCategories = false, $aMallInherit = null )
00056     {
00057         $oDb        = oxDb::getDb();
00058         $aLanguages = oxLang::getInstance()->getLanguageIds();
00059 
00060         $aTables = $aMultilangTables = oxLang::getInstance()->getMultiLangTables();
00061 
00062         $aQ = array();
00063 
00064         // Generate multitable views
00065         foreach ( $aTables as $sTable ) {
00066             $aQ[] = 'CREATE OR REPLACE SQL SECURITY INVOKER VIEW oxv_'.$sTable.' AS SELECT * FROM '.$sTable.' '.$this->_getViewJoinAll($sTable);
00067 
00068             if (in_array($sTable, $aMultilangTables)) {
00069                 foreach ($aLanguages as $iLang => $sLang) {
00070                     $aQ[] = 'CREATE OR REPLACE SQL SECURITY INVOKER VIEW oxv_'.$sTable.'_'.$sLang.' AS SELECT '.$this->_getViewSelect($sTable, $iLang).' FROM '.$sTable.' '.$this->_getViewJoinLang($sTable, $iLang);
00071                 }
00072             }
00073         }
00074 
00075         $bSuccess = true;
00076         foreach ($aQ as $sQ) {
00077             if ( !$oDb->execute( $sQ ) ) {
00078                 $bSuccess = false;
00079             }
00080         }
00081 
00082         $oViewsValidator = oxNew( 'oxShopViewValidator' );
00083 
00084         $oViewsValidator->setShopId( $this->getConfig()->getShopId() );
00085         $oViewsValidator->setLanguages( $aLanguages );
00086         $oViewsValidator->setMultiLangTables( $aMultilangTables );
00087         $oViewsValidator->setMultiShopTables( $aMultishopTables );
00088 
00089         $aViews = $oViewsValidator->getInvalidViews();
00090 
00091         foreach ($aViews as $sView) {
00092             $oDb->execute( 'DROP VIEW IF EXISTS '. $sView );
00093         }
00094 
00095         return $bSuccess;
00096     }
00097 
00106     protected function _getViewSelect($sTable,$iLang)
00107     {
00108         $oMetaData = oxNew('oxDbMetaDataHandler');
00109         $aFields = $oMetaData->getSinglelangFields($sTable, $iLang);
00110         foreach ($aFields as $sCoreField => $sField) {
00111             if ($sCoreField !== $sField) {
00112                 $aFields[$sCoreField] = $sField.' AS '.$sCoreField;
00113             }
00114         }
00115 
00116         return implode(',', $aFields);
00117     }
00118 
00126     protected function _getViewJoinAll($sTable)
00127     {
00128         $sJoin = ' ';
00129         $oMetaData = oxNew('oxDbMetaDataHandler');
00130         $aTables = $oMetaData->getAllMultiTables($sTable);
00131         if (count($aTables)) {
00132             foreach ($aTables as $sTableKey => $sTableName) {
00133                 $sJoin .= "LEFT JOIN {$sTableName} USING (OXID) ";
00134             }
00135         }
00136         return $sJoin;
00137     }
00138 
00147     protected function _getViewJoinLang($sTable,$iLang)
00148     {
00149         $sJoin = ' ';
00150         $sLangTable = getLangTableName($sTable, $iLang);
00151         if ($sLangTable && $sLangTable !== $sTable) {
00152             $sJoin .= "LEFT JOIN {$sLangTable} USING (OXID) ";
00153         }
00154         return $sJoin;
00155     }
00156 
00157 }