Fix #1243 Phraseanet enabled languages is now configurable

This commit is contained in:
Romain Neutron
2013-07-10 16:51:15 +02:00
parent bf5d49cba9
commit 0ab927ec97
14 changed files with 92 additions and 20 deletions

View File

@@ -41,6 +41,7 @@
xsendfile mapping depending on databoxes configuration.
- bin/console xsendfile:configuration-dumper that dumps your virtual
host configuration depending on Phraseanet configuration
- Phraseanet enabled languages is now configurable.
* 3.7.13 (2013-07-04)

View File

@@ -1,6 +1,7 @@
main:
servername: 'http://local.phrasea/'
maintenance: false
languages: []
database:
host: 127.0.0.1
port: 3306

View File

@@ -446,7 +446,7 @@ class Databox implements ControllerProviderInterface
public function getDatabaseCGU(Application $app, Request $request, $databox_id)
{
return $app['twig']->render('admin/databox/cgus.html.twig', array(
'languages' => $app->getAvailableLanguages(),
'languages' => $app['locales.available'],
'cgus' => $app['phraseanet.appbox']->get_databox($databox_id)->get_cgus(),
'current_locale' => $app['locale']
));

View File

@@ -144,7 +144,7 @@ class Fields implements ControllerProviderInterface
{
$languages = array();
foreach (PhraseaApplication::getAvailableLanguages() as $code => $language) {
foreach ($app['locales.available'] as $code => $language) {
$data = explode('_', $code);
$languages[$data[0]] = $language;
}

View File

@@ -123,7 +123,7 @@ class Root implements ControllerProviderInterface
'thesau_js_list' => $thjslist,
'thesau_json_sbas' => json_encode($sbas),
'thesau_json_bas2sbas' => json_encode($bas2sbas),
'thesau_languages' => $app->getAvailableLanguages(),
'thesau_languages' => $app['locales.available'],
));
})->bind('prod');

View File

@@ -369,7 +369,7 @@ class Thesaurus implements ControllerProviderInterface
$lng_code = explode('_', $code);
return $lng_code[0];
}, array_keys(PhraseaApplication::getAvailableLanguages()));
}, array_keys($app['locales.available']));
} else {
$t_lng[] = $request->get('piv');
}
@@ -792,7 +792,7 @@ class Thesaurus implements ControllerProviderInterface
$bases[$row['sbas_id']] = \phrasea::sbas_labels($row['sbas_id'], $app);
}
foreach (PhraseaApplication::getAvailableLanguages() as $lng_code => $lng) {
foreach ($app['locales.available'] as $lng_code => $lng) {
$lng_code = explode('_', $lng_code);
$languages[$lng_code[0]] = $lng;
}
@@ -1125,7 +1125,7 @@ class Thesaurus implements ControllerProviderInterface
{
$languages = array();
foreach (PhraseaApplication::getAvailableLanguages() as $lng_code => $lng) {
foreach ($app['locales.available'] as $lng_code => $lng) {
$lng_code = explode('_', $lng_code);
$languages[$lng_code[0]] = $lng;
}
@@ -1202,7 +1202,7 @@ class Thesaurus implements ControllerProviderInterface
);
}
foreach (PhraseaApplication::getAvailableLanguages() as $code => $language) {
foreach ($app['locales.available'] as $code => $language) {
$lng_code = explode('_', $code);
$languages[$lng_code[0]] = $language;
}
@@ -1229,7 +1229,7 @@ class Thesaurus implements ControllerProviderInterface
{
$flags = $jsFlags = array();
foreach (PhraseaApplication::getAvailableLanguages() as $code => $language) {
foreach ($app['locales.available'] as $code => $language) {
$lng_code = explode('_', $code);
$flags[$lng_code[0]] = $language;
$jsFlags[$lng_code[0]] = array('w' => 18, 'h' => 13);

View File

@@ -77,7 +77,7 @@ class PhraseaLocaleSubscriber implements EventSubscriberInterface
);
}
$languages = PhraseaApplication::getAvailableLanguages();
$languages = $this->app['locales.available'];
if ($event->getRequest()->cookies->has('locale')
&& isset($languages[$event->getRequest()->cookies->get('locale')])) {
$event->getRequest()->setLocale($event->getRequest()->cookies->get('locale'));

View File

@@ -36,12 +36,38 @@ class LocaleServiceProvider implements ServiceProviderInterface
};
$app['locales.available'] = function (Application $app) {
return PhraseaApplication::getAvailableLanguages();
$availableLanguages = PhraseaApplication::getAvailableLanguages();
if (isset($app['phraseanet.configuration']['main']['languages']) && !empty($app['phraseanet.configuration']['main']['languages'])) {
$languages = $app['phraseanet.configuration']['main']['languages'];
$enabledLanguages = $availableLanguages;
foreach ($enabledLanguages as $code => $language) {
if (in_array($code, $languages)) {
continue;
}
$data = explode('_', $code);
if (in_array($data[0], $languages)) {
continue;
}
unset($enabledLanguages[$code]);
}
if (0 === count($enabledLanguages)) {
$app['monolog']->error('Wrong language configuration, no language activated');
return $availableLanguages;
}
return $enabledLanguages;
} else {
return $availableLanguages;
}
};
$app['locales.mapping'] = function (Application $app) {
$codes = array();
foreach (PhraseaApplication::getAvailableLanguages() as $code => $language) {
foreach ($app['locales.available'] as $code => $language) {
$data = explode('_', $code);
$codes[$data[0]] = $code;
}
@@ -52,7 +78,8 @@ class LocaleServiceProvider implements ServiceProviderInterface
$app['locales.I18n.available'] = $app->share(function (Application $app) {
$locales = array();
foreach (PhraseaApplication::getAvailableLanguages() as $code => $language) {
var_dump($app['locales.available']);exit;
foreach ($app['locales.available'] as $code => $language) {
$data = explode('_', $code);
$locales[$data[0]] = $language;
}

View File

@@ -1671,7 +1671,7 @@ class User_Adapter implements User_Interface, cache_cacheableInterface
public function set_locale($locale)
{
if (!array_key_exists($locale, $this->app->getAvailableLanguages())) {
if (!array_key_exists($locale, $this->app['locales.available'])) {
throw new \InvalidArgumentException(sprintf('Locale %s is not recognized', $locale));
}

View File

@@ -1380,7 +1380,7 @@ class databox extends base
$missing_locale = array();
$avLanguages = $this->app->getAvailableLanguages();
$avLanguages = $this->app['locales.available'];
foreach ($avLanguages as $code => $language) {
if (!isset($TOU[$code])) {
$missing_locale[] = $code;

View File

@@ -4,7 +4,7 @@ use Alchemy\Phrasea\Application;
return call_user_func_array(function(Application $app) {
$avLanguages = Application::getAvailableLanguages();
$avLanguages = $app['locales.available'];
$youtube_console_url = '<a href="https://code.google.com/apis/console/" target="_blank">https://code.google.com/apis/console/</a>';
$dashboard_youtube = '<a href="https://code.google.com/apis/youtube/dashboard/" target="_blank">https://code.google.com/apis/youtube/dashboard/</a>';

View File

@@ -1,6 +1,7 @@
main:
servername: 'http://local.phrasea/'
maintenance: false
languages: []
database:
host: 'sql-host'
port: 3306

View File

@@ -18,6 +18,52 @@ class LocaleServiceProvidertest extends \PhraseanetPHPUnitAbstract
$this->assertEquals(Application::getAvailableLanguages(), $app['locales.available']);
}
public function testLocalesAvailableCustomized()
{
$app = new Application();
$app->register(new LocaleServiceProvider());
$app['phraseanet.configuration'] = $this->getMock('Alchemy\Phrasea\Core\Configuration\ConfigurationInterface');
$app['phraseanet.configuration']->expects($this->any())
->method('offsetExist')
->with('main')
->will($this->returnValue(true));
$app['phraseanet.configuration']->expects($this->any())
->method('offsetGet')
->with('main')
->will($this->returnValue(array('languages' => array('fr_FR', 'en_US', 'de'))));
$original = Application::getAvailableLanguages();
unset($original['en_GB']);
unset($original['nl_NL']);
$this->assertEquals($original, $app['locales.available']);
}
public function testLocalesCustomizedWithError()
{
$app = new Application();
$app->register(new LocaleServiceProvider());
$app['phraseanet.configuration'] = $this->getMock('Alchemy\Phrasea\Core\Configuration\ConfigurationInterface');
$app['phraseanet.configuration']->expects($this->any())
->method('offsetExist')
->with('main')
->will($this->returnValue(true));
$app['phraseanet.configuration']->expects($this->any())
->method('offsetGet')
->with('main')
->will($this->returnValue(array('languages' => array('en_US'))));
$app['monolog'] = $this->getMock('Psr\Log\LoggerInterface');
$app['monolog']->expects($this->once())
->method('error');
$original = Application::getAvailableLanguages();
unset($original['nl_NL']);
unset($original['fr_FR']);
unset($original['de_DE']);
$this->assertEquals($original, $app['locales.available']);
}
public function testLocalesI18nAvailable()
{
$app = new Application();

View File

@@ -375,11 +375,7 @@ abstract class SearchEngineAbstractTest extends \PhraseanetPHPUnitAuthenticatedA
'nl' => array('word' => 'lichamelijk', 'stemm' => 'licham'),
);
foreach (Application::getAvailableLanguages() as $language => $name) {
$codes = explode('_', $language);
$languageCode = $codes[0];
foreach (Application::getAvailableLanguages() as $languageCode) {
if (!isset($examples[$languageCode])) {
$this->fail(sprintf('Missing stemm examples for language %s', $languageCode));
}