/** * Check if selected language already has multilanguage fields in DB * * @param string $sOxId language abbervation * * @return bool */ protected function _checkMultilangFieldsExistsInDb($sOxId) { $iBaseId = $this->_aLangData['params'][$sOxId]['baseId']; $sTable = getLangTableName('oxarticles', $iBaseId); $sColumn = 'oxtitle' . oxLang::getInstance()->getLanguageTag($iBaseId); $oDbMetadata = oxNew('oxDbMetaDataHandler'); return $oDbMetadata->tableExists($sTable) && $oDbMetadata->fieldExists($sColumn, $sTable); }
/** * Saves article tags to DB. Returns true on success. * * @return bool */ public function save() { if (!$this->getArticleId()) { return false; } $oTagSet = $this->get(); foreach ($oTagSet as $oTag) { $oTag->addUnderscores(); } $sTags = oxDb::getInstance()->escapeString($oTagSet); $oDb = oxDb::getDb(); $sTable = getLangTableName('oxartextends', $this->getLanguage()); $sLangSuffix = oxRegistry::getLang()->getLanguageTag($this->getLanguage()); $sQ = "insert into {$sTable} (oxid, oxtags{$sLangSuffix}) value (" . $oDb->quote($this->getArticleId()) . ", '{$sTags}')\n on duplicate key update oxtags{$sLangSuffix} = '{$sTags}'"; if ($oDb->execute($sQ)) { $this->executeDependencyEvent(); return true; } return false; }
/** * Returns language table view JOIN section * * @param string $sTable table name * @param array $iLang language id * * @return string $sSQL */ protected function _getViewJoinLang($sTable, $iLang) { $sJoin = ' '; $sLangTable = getLangTableName($sTable, $iLang); if ($sLangTable && $sLangTable !== $sTable) { $sJoin .= "LEFT JOIN {$sLangTable} USING (OXID) "; } return $sJoin; }
/** * Make sure that all *_set* tables with all required multilanguage fields are created. * * @param $table * @param $languagaId * * @return null */ protected function ensureMultiLanguageFields($table, $languageId) { $fields = $this->getMultilangFields($table); $sql = array(); $tableSet = getLangTableName($table, $languageId); if (!$this->tableExists($tableSet)) { $sql[] = $this->_getCreateTableSetSql($table, $languageId); } if (is_array($fields) && count($fields) > 0) { foreach ($fields as $field) { $newFieldName = $field . "_" . $languageId; if ($languageId > 1) { $previousLanguage = $languageId - 1; $previousField = $field . '_' . $previousLanguage; } else { $previousField = $field; } if (!$this->tableExists($tableSet) || !$this->fieldExists($newFieldName, $tableSet)) { //getting add field sql $sql[] = $this->getAddFieldSql($table, $field, $newFieldName, $previousField, $tableSet); //getting add index sql on added field $sql = array_merge($sql, (array) $this->getAddFieldIndexSql($table, $field, $newFieldName, $tableSet)); } } } $this->executeSql($sql); }
/** * base test */ public function testGetUpdateFieldsForTableNonMlObject() { $cl = oxTestModules::addFunction(oxTestModules::addFunction('oxi18n', '__setFieldNames($fn)', '{$this->_aFieldNames = $fn;}'), '__getFieldNames', '{return $this->_aFieldNames;}'); $oObj = new $cl(); $oObj->setEnableMultilang(false); $oObj->init('oxstates'); $oObj->__setFieldNames(array_merge($oObj->__getFieldNames(), array('oxtitle_90' => 0))); $oObj->setId('test_a'); $oObj->oxstates__oxtitle_90 = new oxField('titletest'); $oObj->setLanguage(0); $this->assertEquals("oxid = 'test_a',oxcountryid = '',oxtitle = '',oxisoalpha2 = '',oxtitle_1 = '',oxtitle_2 = '',oxtitle_3 = ''", $oObj->UNITgetUpdateFieldsForTable('oxstates')); $this->assertEquals("oxid = 'test_a',oxtitle_90 = 'titletest'", $oObj->UNITgetUpdateFieldsForTable(getLangTableName('oxstates', 90))); $this->assertEquals("oxid = 'test_a'", $oObj->UNITgetUpdateFieldsForTable(getLangTableName('oxstates', 100))); $oObj->setLanguage(90); $this->assertEquals("oxid = 'test_a',oxcountryid = '',oxtitle = '',oxisoalpha2 = '',oxtitle_1 = '',oxtitle_2 = '',oxtitle_3 = ''", $oObj->UNITgetUpdateFieldsForTable('oxstates')); $this->assertEquals("oxid = 'test_a',oxtitle_90 = 'titletest'", $oObj->UNITgetUpdateFieldsForTable(getLangTableName('oxstates', 90))); $this->assertEquals("oxid = 'test_a'", $oObj->UNITgetUpdateFieldsForTable(getLangTableName('oxstates', 100))); }
/** * Update this Object into the database, this function only works on * the main table, it will not save any dependend tables, which might * be loaded through oxlist (with exception of the active language set * table, which will be updated). * * @throws oxObjectException Throws on failure inserting * * @return bool */ protected function _update() { $blRet = parent::_update(); if ($blRet) { //also update multilang table if it is separate $aUpdateTables = array(); if ($this->_blEmployMultilanguage) { $sCoreTable = $this->getCoreTableName(); $sLangTable = getLangTableName($sCoreTable, $this->getLanguage()); if ($sCoreTable != $sLangTable) { $aUpdateTables[] = $sLangTable; } } else { $aUpdateTables = $this->_getLanguageSetTables(); } foreach ($aUpdateTables as $sLangTable) { $sUpdate = "insert into {$sLangTable} set " . $this->_getUpdateFieldsForTable($sLangTable, $this->getUseSkipSaveFields()) . " on duplicate key update " . $this->_getUpdateFieldsForTable($sLangTable); $blRet = (bool) oxDb::getDb()->execute($sUpdate); } } // currently only multilanguage objects are SEO // if current object is managed by SEO and SEO is ON if ($blRet && $this->_blIsSeoObject && $this->getUpdateSeo() && $this->isAdmin()) { // marks all object db entries as expired oxRegistry::get("oxSeoEncoder")->markAsExpired($this->getId(), null, 1, $this->getLanguage()); } return $blRet; }
/** * Add new multilanguages fields to table. Dublicates all multilanguage * fields and fields indexes with next available language ID * * @param string $sTable table name * * @return null */ public function addNewMultilangField($sTable) { $aSql = array(); $aFields = $this->getMultilangFields($sTable); $iMaxLang = $this->getCurrentMaxLangId(); $iNewLang = $this->getNextLangId(); $sTableSet = getLangTableName($sTable, $iNewLang); if (!$this->tableExists($sTableSet)) { $aSql[] = $this->_getCreateTableSetSql($sTable, $iNewLang); } if (is_array($aFields) && count($aFields) > 0) { foreach ($aFields as $sField) { $sNewFieldName = $sField . "_" . $iNewLang; if (!$this->tableExists($sTableSet) || !$this->fieldExists($sNewFieldName, $sTableSet)) { //getting add field sql $aSql[] = $this->_getAddFieldSql($sTable, $sField, $iNewLang); //getting add index sql on added field $aSql = array_merge($aSql, (array) $this->_getAddFieldIndexSql($sTable, $sField, $iNewLang)); } } } $this->_executeSql($aSql); }
/** * Adds tag * * @param string $sTag new tag * * @return bool */ public function addTag($sTag) { $oDb = oxDb::getDb(); $oTagCloud = oxNew('oxtagcloud'); $oTagCloud->resetTagCache(); $sTag = $oTagCloud->prepareTags($sTag); $sTagSeparator = $this->getConfig()->getConfigParam('sTagSeparator'); $sTable = getLangTableName('oxartextends', $this->getLanguage()); $sLangSuffix = oxLang::getInstance()->getLanguageTag($this->getLanguage()); if ($oDb->getOne("select {$sTable}.OXTAGS{$sLangSuffix} from {$sTable} where {$sTable}.OXID = " . $oDb->quote($this->getId()))) { $sTailTag = $sTagSeparator . $sTag; } else { $sTailTag = $sTag; } $sTag = mysql_real_escape_string($sTag); $sTailTag = mysql_real_escape_string($sTailTag); $sTag = mysql_real_escape_string($sTag); $sTailTag = mysql_real_escape_string($sTailTag); $sQ = "insert into {$sTable} ( {$sTable}.OXID, {$sTable}.OXTAGS{$sLangSuffix}) values (" . $oDb->quote($this->getId()) . ", '{$sTag}')\n ON DUPLICATE KEY update {$sTable}.OXTAGS{$sLangSuffix} = CONCAT(TRIM({$sTable}.OXTAGS{$sLangSuffix}), '{$sTailTag}') "; return $oDb->execute($sQ); }