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 = oxLang::getInstance()->getMultiLangTables();
00067
00068 $aQ = array();
00069
00070
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 }