mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
API CHANGE Using i18n::validate_locale() in various Translatable methods to ensure the locale exists (as defined through i18n::$allowed_locales) (from r114470)
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.4@114474 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
parent
924f0feb5d
commit
1670dab5e1
@ -268,6 +268,8 @@ class Translatable extends DataObjectDecorator implements PermissionProvider {
|
||||
* @param $locale String
|
||||
*/
|
||||
static function set_default_locale($locale) {
|
||||
if($locale && !i18n::validate_locale($locale)) throw new InvalidArgumentException(sprintf('Invalid locale "%s"', $locale));
|
||||
|
||||
$localeList = i18n::get_locale_list();
|
||||
if(isset($localeList[$locale])) {
|
||||
self::$default_locale = $locale;
|
||||
@ -295,6 +297,8 @@ class Translatable extends DataObjectDecorator implements PermissionProvider {
|
||||
* @param string $lang New reading language.
|
||||
*/
|
||||
static function set_current_locale($locale) {
|
||||
if($locale && !i18n::validate_locale($locale)) throw new InvalidArgumentException(sprintf('Invalid locale "%s"', $locale));
|
||||
|
||||
self::$current_locale = $locale;
|
||||
}
|
||||
|
||||
@ -308,6 +312,8 @@ class Translatable extends DataObjectDecorator implements PermissionProvider {
|
||||
* @return DataObject
|
||||
*/
|
||||
static function get_one_by_locale($class, $locale, $filter = '', $cache = false, $orderby = "") {
|
||||
if($locale && !i18n::validate_locale($locale)) throw new InvalidArgumentException(sprintf('Invalid locale "%s"', $locale));
|
||||
|
||||
$orig = Translatable::get_current_locale();
|
||||
Translatable::set_current_locale($locale);
|
||||
$do = DataObject::get_one($class, $filter, $cache, $orderby);
|
||||
@ -329,6 +335,8 @@ class Translatable extends DataObjectDecorator implements PermissionProvider {
|
||||
* @return mixed The objects matching the conditions.
|
||||
*/
|
||||
static function get_by_locale($class, $locale, $filter = '', $sort = '', $join = "", $limit = "", $containerClass = "DataObjectSet", $having = "") {
|
||||
if($locale && !i18n::validate_locale($locale)) throw new InvalidArgumentException(sprintf('Invalid locale "%s"', $locale));
|
||||
|
||||
$oldLang = self::get_current_locale();
|
||||
self::set_current_locale($locale);
|
||||
$result = DataObject::get($class, $filter, $sort, $join, $limit, $containerClass, $having);
|
||||
@ -1053,6 +1061,8 @@ class Translatable extends DataObjectDecorator implements PermissionProvider {
|
||||
* @return DataObjectSet
|
||||
*/
|
||||
function getTranslations($locale = null, $stage = null) {
|
||||
if($locale && !i18n::validate_locale($locale)) throw new InvalidArgumentException(sprintf('Invalid locale "%s"', $locale));
|
||||
|
||||
if($this->owner->exists()) {
|
||||
// HACK need to disable language filtering in augmentSQL(),
|
||||
// as we purposely want to get different language
|
||||
@ -1103,6 +1113,8 @@ class Translatable extends DataObjectDecorator implements PermissionProvider {
|
||||
* @return DataObject Translated object
|
||||
*/
|
||||
function getTranslation($locale, $stage = null) {
|
||||
if($locale && !i18n::validate_locale($locale)) throw new InvalidArgumentException(sprintf('Invalid locale "%s"', $locale));
|
||||
|
||||
$translations = $this->getTranslations($locale, $stage);
|
||||
return ($translations) ? $translations->First() : null;
|
||||
}
|
||||
@ -1120,6 +1132,8 @@ class Translatable extends DataObjectDecorator implements PermissionProvider {
|
||||
* @return DataObject The translated object
|
||||
*/
|
||||
function createTranslation($locale) {
|
||||
if($locale && !i18n::validate_locale($locale)) throw new InvalidArgumentException(sprintf('Invalid locale "%s"', $locale));
|
||||
|
||||
if(!$this->owner->exists()) {
|
||||
user_error('Translatable::createTranslation(): Please save your record before creating a translation', E_USER_ERROR);
|
||||
}
|
||||
@ -1179,6 +1193,8 @@ class Translatable extends DataObjectDecorator implements PermissionProvider {
|
||||
* @return boolean
|
||||
*/
|
||||
function canTranslate($member = null, $locale) {
|
||||
if($locale && !i18n::validate_locale($locale)) throw new InvalidArgumentException(sprintf('Invalid locale "%s"', $locale));
|
||||
|
||||
if(!$member || !(is_a($member, 'Member')) || is_numeric($member)) $member = Member::currentUser();
|
||||
|
||||
// check for locale
|
||||
@ -1218,6 +1234,8 @@ class Translatable extends DataObjectDecorator implements PermissionProvider {
|
||||
* @return boolean
|
||||
*/
|
||||
function hasTranslation($locale) {
|
||||
if($locale && !i18n::validate_locale($locale)) throw new InvalidArgumentException(sprintf('Invalid locale "%s"', $locale));
|
||||
|
||||
return (
|
||||
$this->owner->Locale == $locale
|
||||
|| array_search($locale, $this->getTranslatedLocales()) !== false
|
||||
|
@ -57,7 +57,7 @@ class TranslatableTest extends FunctionalTest {
|
||||
$this->assertEquals(301, $response->getStatusCode(), 'Locale GET param causes redirect if it exists');
|
||||
$this->assertContains($translatedPage->URLSegment, $response->getHeader('Location'));
|
||||
|
||||
$response = $this->get(Controller::join_links($origPage->URLSegment, '?locale=xx_XX'));
|
||||
$response = $this->get(Controller::join_links($origPage->URLSegment, '?locale=fr_FR'));
|
||||
$this->assertEquals(200, $response->getStatusCode(), 'Locale GET param without existing translation shows original page');
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user