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
00032
00033 $this->init( 'oxshops' );
00034 }
00035
00043 public function setMultiShopTables( $aMultiShopTables )
00044 {
00045 $this->_aMultiShopTables = $aMultiShopTables;
00046 }
00047
00048
00057 public function generateViews( $blMultishopInheritCategories = false, $aMallInherit = null )
00058 {
00059 $oDb = oxDb::getDb();
00060 $aLanguages = oxLang::getInstance()->getLanguageIds();
00061
00062 $aTables = $aMultilangTables = oxLang::getInstance()->getMultiLangTables();
00063
00064 $aQ = array();
00065
00066
00067 foreach ( $aTables as $sTable ) {
00068 $aQ[] = 'CREATE OR REPLACE SQL SECURITY INVOKER VIEW oxv_'.$sTable.' AS SELECT * FROM '.$sTable.' '.$this->_getViewJoinAll($sTable);
00069
00070 if (in_array($sTable, $aMultilangTables)) {
00071 foreach ($aLanguages as $iLang => $sLang) {
00072 $aQ[] = 'CREATE OR REPLACE SQL SECURITY INVOKER VIEW oxv_'.$sTable.'_'.$sLang.' AS SELECT '.$this->_getViewSelect($sTable, $iLang).' FROM '.$sTable.' '.$this->_getViewJoinLang($sTable, $iLang);
00073 }
00074 }
00075 }
00076
00077 $bSuccess = true;
00078 foreach ($aQ as $sQ) {
00079 if ( !$oDb->execute( $sQ ) ) {
00080 $bSuccess = false;
00081 }
00082 }
00083
00084 $oViewsValidator = oxNew( 'oxShopViewValidator' );
00085
00086 $oViewsValidator->setShopId( $this->getConfig()->getShopId() );
00087 $oViewsValidator->setLanguages( $aLanguages );
00088 $oViewsValidator->setMultiLangTables( $aMultilangTables );
00089 $oViewsValidator->setMultiShopTables( $aMultishopTables );
00090
00091 $aViews = $oViewsValidator->getInvalidViews();
00092
00093 foreach ($aViews as $sView) {
00094 $oDb->execute( 'DROP VIEW IF EXISTS '. $sView );
00095 }
00096
00097 return $bSuccess;
00098 }
00099
00108 protected function _getViewSelect($sTable,$iLang)
00109 {
00110 $oMetaData = oxNew('oxDbMetaDataHandler');
00111 $aFields = $oMetaData->getSinglelangFields($sTable, $iLang);
00112 foreach ($aFields as $sCoreField => $sField) {
00113 if ($sCoreField !== $sField) {
00114 $aFields[$sCoreField] = $sField.' AS '.$sCoreField;
00115 }
00116 }
00117
00118 return implode(',', $aFields);
00119 }
00120
00128 protected function _getViewJoinAll($sTable)
00129 {
00130 $sJoin = ' ';
00131 $oMetaData = oxNew('oxDbMetaDataHandler');
00132 $aTables = $oMetaData->getAllMultiTables($sTable);
00133 if (count($aTables)) {
00134 foreach ($aTables as $sTableKey => $sTableName) {
00135 $sJoin .= "LEFT JOIN {$sTableName} USING (OXID) ";
00136 }
00137 }
00138 return $sJoin;
00139 }
00140
00149 protected function _getViewJoinLang($sTable,$iLang)
00150 {
00151 $sJoin = ' ';
00152 $sLangTable = getLangTableName($sTable, $iLang);
00153 if ($sLangTable && $sLangTable !== $sTable) {
00154 $sJoin .= "LEFT JOIN {$sLangTable} USING (OXID) ";
00155 }
00156 return $sJoin;
00157 }
00158
00159 }