/**
  * 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);
 }
Ejemplo n.º 2
0
 /**
  * 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;
 }
Ejemplo n.º 3
0
 /**
  * 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;
 }
Ejemplo n.º 4
0
 /**
  * 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);
 }
Ejemplo n.º 5
0
 /**
  * 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)));
 }
Ejemplo n.º 6
0
 /**
  * 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);
 }
Ejemplo n.º 8
0
 /**
  * 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);
 }