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
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 }