oxshop.php

Go to the documentation of this file.
00001 <?php
00002 
00008 class oxShop extends oxI18n
00009 {
00015     protected $_sCoreTbl = 'oxshops';
00016 
00022     protected $_sClassName = 'oxshop';
00023 
00029     protected $_aMultiShopTables = array();
00030 
00034     public function __construct()
00035     {
00036         parent::__construct();
00037         $this->init( 'oxshops' );
00038     }
00039 
00047     public function setMultiShopTables( $aMultiShopTables )
00048     {
00049         $this->_aMultiShopTables = $aMultiShopTables;
00050     }
00051 
00052 
00061     public function generateViews( $blMultishopInherit = false, $aMallInherit = null )
00062     {
00063         $oDB        = oxDb::getDb();
00064         $aLanguages = oxLang::getInstance()->getLanguageIds();
00065 
00066         $aTables = $aMultilangTables = getMultilangTables();
00067 
00068         $aQ = array();
00069 
00070         // Generate multitable views
00071         foreach ( $aTables as $sTable ) {
00072             $aQ[] = 'CREATE OR REPLACE VIEW oxv_'.$sTable.' AS SELECT * FROM '.$sTable.' '.$this->_getViewJoinAll($sTable);
00073 
00074             if (in_array($sTable, $aMultilangTables)) {
00075                 foreach ($aLanguages as $iLang => $sLang) {
00076                     $aQ[] = 'CREATE OR REPLACE VIEW oxv_'.$sTable.'_'.$sLang.' AS SELECT '.$this->_getViewSelect($sTable, $iLang).' FROM '.$sTable.' '.$this->_getViewJoinLang($sTable, $iLang);
00077                 }
00078             }
00079         }
00080 
00081         foreach ($aQ as $sQ) {
00082             $oDB->execute( $sQ );
00083         }
00084     }
00085 
00094     protected function _getViewSelect($sTable,$iLang)
00095     {
00096         $oMetaData = oxNew('oxDbMetaDataHandler');
00097         $aFields = $oMetaData->getSinglelangFields($sTable, $iLang);
00098         foreach ($aFields as $sCoreField => $sField) {
00099             if ($sCoreField !== $sField) {
00100                 $aFields[$sCoreField] = $sField.' AS '.$sCoreField;
00101             }
00102         }
00103 
00104         return implode(',', $aFields);
00105     }
00106 
00114     protected function _getViewJoinAll($sTable)
00115     {
00116         $sJoin = ' ';
00117         $oMetaData = oxNew('oxDbMetaDataHandler');
00118         $aTables = $oMetaData->getAllMultiTables($sTable);
00119         if (count($aTables)) {
00120             foreach ($aTables as $sTableKey => $sTableName) {
00121                 $sJoin .= "LEFT JOIN {$sTableName} USING (OXID) ";
00122             }
00123         }
00124         return $sJoin;
00125     }
00126 
00135     protected function _getViewJoinLang($sTable,$iLang)
00136     {
00137         $sJoin = ' ';
00138         $sLangTable = getLangTableName($sTable, $iLang);
00139         if ($sLangTable && $sLangTable !== $sTable) {
00140             $sJoin .= "LEFT JOIN {$sLangTable} USING (OXID) ";
00141         }
00142         return $sJoin;
00143     }
00144 
00145 }