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 
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         // Generate multitable views
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 }