/** * Adds new language to the site. * * \param locale Locale code (e.g. 'slk-SK') of language to add. * \param name Optional. Name of the language. If not specified, the international language name for the $locale locale * will be used. * \return eZContentLanguage object of the added language (or the existing one if specified language has been already used) * or false in case of any error (invalid locale code or already reached eZContentLanguage::maxCount() languages). * \static */ static function addLanguage($locale, $name = null) { $localeObject = eZLocale::instance($locale); if (!$localeObject) { eZDebug::writeError("No such locale {$locale}!", __METHOD__); return false; } if ($name === null) { $name = $localeObject->attribute('intl_language_name'); } $db = eZDB::instance(); $languages = eZContentLanguage::fetchList(true); if ($existingLanguage = eZContentLanguage::fetchByLocale($locale)) { eZDebug::writeWarning("Language '{$locale}' already exists!", __METHOD__); return $existingLanguage; } if (count($languages) >= self::maxCount()) { eZDebug::writeError('Too many languages, cannot add more!', __METHOD__); return false; } $db->lock('ezcontent_language'); $idSum = 0; foreach ($languages as $language) { $idSum += $language->attribute('id'); } // ID 1 is reserved $candidateId = 2; while ($idSum & $candidateId) { $candidateId *= 2; } $newLanguage = new eZContentLanguage(array('id' => $candidateId, 'locale' => $locale, 'name' => $name, 'disabled' => 0)); $newLanguage->store(); $db->unlock(); eZContentLanguage::fetchList(true); // clear the cache eZContentCacheManager::clearAllContentCache(); return $newLanguage; }