Exemplo n.º 1
0
 /**
  * @param CM_Model_Language $language
  */
 public function __construct(CM_Model_Language $language)
 {
     $translations = array();
     foreach (new CM_Paging_Translation_Language($language, null, null, null, true) as $translation) {
         $translations[$translation['key']] = $language->getTranslation($translation['key']);
     }
     $this->_content = 'cm.language.setAll(' . CM_Params::encode($translations, true) . ');';
 }
Exemplo n.º 2
0
 /**
  * @param CM_Site_Abstract  $site
  * @param bool|null         $debug
  * @param CM_Model_Language $language
  */
 public function __construct(CM_Site_Abstract $site, $debug = null, CM_Model_Language $language)
 {
     parent::__construct($site, $debug);
     $translations = array();
     foreach ($language->getTranslations(true) as $translation) {
         $translations[$translation['key']] = $language->getTranslation($translation['key']);
     }
     $this->_js->append('cm.language.setAll(' . CM_Params::encode($translations, true) . ');');
 }
Exemplo n.º 3
0
 public function testProcessTranslationsEnableKey()
 {
     $language = CMTest_TH::createLanguage('test');
     $languageKey = CM_Model_LanguageKey::create('Hello World');
     $this->assertSame(false, $languageKey->getJavascript());
     $site = CM_Site_Abstract::factory();
     $render = new CM_Frontend_Render(new CM_Frontend_Environment(null, null, $language));
     // Check that key is *not* included in the JS translations list
     $versionJavascript = CM_Model_Language::getVersionJavascript();
     $request = new CM_Http_Request_Get($render->getUrlResource('library-js', "translations/{$versionJavascript}.js"));
     $response = CM_Http_Response_Resource_Javascript_Library::createFromRequest($request, $site, $this->getServiceManager());
     $response->process();
     $this->assertNotContains('Hello World', $response->getContent());
     // Request JS-enabling of language key via RPC call
     $body = CM_Params::jsonEncode(['method' => 'CM_Model_Language.requestTranslationJs', 'params' => ['Hello World']]);
     $request = new CM_Http_Request_Post('/rpc', null, null, $body);
     $response = CM_Http_Response_RPC::createFromRequest($request, $site, $this->getServiceManager());
     $response->process();
     CMTest_TH::reinstantiateModel($languageKey);
     $this->assertSame(true, $languageKey->getJavascript());
     // Check that key *is* included in the JS translations list
     $versionJavascript = CM_Model_Language::getVersionJavascript();
     $request = new CM_Http_Request_Get($render->getUrlResource('library-js', "translations/{$versionJavascript}.js"));
     $response = CM_Http_Response_Resource_Javascript_Library::createFromRequest($request, $site, $this->getServiceManager());
     $response->process();
     $this->assertContains('Hello World', $response->getContent());
 }
Exemplo n.º 4
0
 public function testTrailingWhitespaceInLanguageKeyName()
 {
     CM_Db_Db::insert('cm_model_languagekey', ['name'], [['foo '], ['foo']]);
     $language = CM_Model_Language::create('Foo', 'foo', true);
     $language->getTranslations()->getAssociativeArray();
     $this->assertEquals(['foo ', 'foo'], array_keys($language->getTranslations()->getAssociativeArray()));
     $this->assertCount(2, $language->getTranslations());
 }
Exemplo n.º 5
0
 /**
  * @param string $phrase
  */
 public function remove($phrase)
 {
     $languageKey = CM_Model_LanguageKey::findByName($phrase);
     if (!$languageKey) {
         return;
     }
     CM_Db_Db::delete('cm_languageValue', array('languageKeyId' => $languageKey->getId(), 'languageId' => $this->_language->getId()));
     $this->_change();
 }
Exemplo n.º 6
0
 public function testDelete()
 {
     $language = CM_Model_Language::create('Foo', 'foo', true);
     $language->setTranslation('foo', 'bar');
     $this->assertSame(array('foo' => array('value' => 'bar', 'variables' => array())), $language->getTranslations()->getAssociativeArray());
     $languageKey = CM_Model_LanguageKey::findByName('foo');
     $languageKey->delete();
     $this->assertSame(array(), $language->getTranslations()->getAssociativeArray());
     $this->assertSame(0, CM_Db_Db::count('cm_model_languagekey', array('name' => 'foo')));
     $this->assertSame(0, CM_Db_Db::count('cm_languageValue', array('languageKeyId' => $languageKey->getId(), 'languageId' => $language->getId())));
 }
Exemplo n.º 7
0
 public function testEnabled()
 {
     $english = CM_Model_Language::create('English', 'en', true);
     $italian = CM_Model_Language::create('Italian', 'it', true);
     $german = CM_Model_Language::create('German', 'de', true);
     $french = CM_Model_Language::create('French', 'fr', true);
     $svenska = CM_Model_Language::create('Svenska', 'sv', false);
     $paging = new CM_Paging_Language_Enabled();
     $this->assertEquals([$english, $french, $german, $italian], $paging->getItems());
     $this->assertNotContains($svenska, $paging->getItems());
 }
Exemplo n.º 8
0
 public function testCreateAllData()
 {
     CMTest_TH::createDefaultCurrency();
     $site = $this->getMockSite();
     $language = CM_Model_Language::create('English', 'en', true);
     $currency = CM_Model_Currency::create('978', 'EUR');
     $user = CM_Model_User::createStatic(['site' => $site, 'language' => $language, 'currency' => $currency]);
     $this->assertInternalType('int', $user->getCreated());
     $this->assertEquals(time(), $user->getCreated());
     $this->assertEquals(time(), $user->getLatestActivity());
     $this->assertEquals($site, $user->getSite());
     $this->assertEquals($language, $user->getLanguage());
     $this->assertEquals($currency, $user->getCurrency());
 }
Exemplo n.º 9
0
 public function testRenderTranslated()
 {
     $recipient = CMTest_TH::createUser();
     $mail = new CM_Mail_Welcome($recipient);
     $language = CM_Model_Language::create('Test language', 'foo', true);
     $language->setTranslation('Welcome to {$siteName}!', 'foo');
     list($subject, $html, $text) = $mail->render();
     $nodeList = new CM_Dom_NodeList($html);
     $this->assertContains('foo', $nodeList->getText());
     $nodeLink = $nodeList->find('a');
     $this->assertSame(1, $nodeLink->count());
     $this->assertSame('http://www.default.dev/example', $nodeLink->getAttribute('href'));
     $this->assertSame('Example Page', $nodeLink->getText());
     $this->assertContains('border-style:solid;', $nodeLink->getAttribute('style'));
 }
Exemplo n.º 10
0
 public function testGetters()
 {
     $site = CM_Site_Abstract::factory();
     $user = CM_Model_User::createStatic();
     $language = CM_Model_Language::create('English', 'en', true);
     $timezone = new DateTimeZone('Europe/London');
     $debug = true;
     $location = CM_Model_Location::createCountry('United Kingdom', 'UK');
     $environment = new CM_Frontend_Environment($site, $user, $language, $timezone, $debug, $location);
     $this->assertSame($site, $environment->getSite());
     $this->assertSame($user, $environment->getViewer(true));
     $this->assertSame($language, $environment->getLanguage());
     $this->assertSame($language->getAbbreviation(), $environment->getLocale());
     $this->assertSame($timezone, $environment->getTimeZone());
     $this->assertSame($debug, $environment->isDebug());
     $this->assertSame($location, $environment->getLocation());
 }
Exemplo n.º 11
0
 /**
  * @param CM_Model_Language $language
  * @param bool|null         $javascriptOnly
  */
 public function __construct(CM_Model_Language $language, $javascriptOnly = null)
 {
     $this->_language = $language;
     $this->_javascriptOnly = (bool) $javascriptOnly;
     $where = null;
     if ($javascriptOnly) {
         $where = 'k.javascript = 1';
         // Include the javascript version in the cache key, so the paging invalidates when the version changes.
         $javascriptVersion = CM_Model_Language::getVersionJavascript();
         $where .= " AND '{$javascriptVersion}' = '{$javascriptVersion}'";
     }
     $orderBy = 'k.name ASC';
     $join = 'LEFT JOIN `cm_languageValue` AS v ON k.id = v.languageKeyId AND v.languageId = ' . $this->_language->getId() . ' ';
     $groupBy = 'BINARY k.name';
     $source = new CM_PagingSource_Sql_Deferred('k.name AS `key`, v.value, k.variables', 'cm_model_languagekey` as `k', $where, $orderBy, $join, $groupBy);
     $source->enableCache(null, CM_Cache_Persistent::getInstance());
     parent::__construct($source);
 }
Exemplo n.º 12
0
 public function testPaging()
 {
     $language = CM_Model_Language::create('Foo', 'foo', true);
     $languagePagingAll = $language->getTranslations();
     $languagePagingJavascriptOnly = $language->getTranslations(true);
     $this->assertEquals([], $languagePagingAll);
     $this->assertEquals([], $languagePagingJavascriptOnly);
     $languagePagingAll->set('foo', 'foo');
     // js
     CM_Db_Db::update('cm_model_languagekey', ['javascript' => 1], ['name' => 'foo']);
     $languagePagingJavascriptOnly->set('bar', 'bar');
     // js
     CM_Db_Db::update('cm_model_languagekey', ['javascript' => 1], ['name' => 'bar']);
     $languagePagingAll->set('baz', 'baz');
     // no js
     $this->assertSame('foo', $language->getTranslations()->get('foo'));
     $this->assertSame('foo', $language->getTranslations(true)->get('foo'));
     $this->assertSame('bar', $language->getTranslations()->get('bar'));
     $this->assertSame('bar', $language->getTranslations(true)->get('bar'));
     $this->assertSame('baz', $language->getTranslations()->get('baz'));
     $exception = $this->catchException(function () use($language) {
         $language->getTranslations(true)->get('baz');
     });
     $this->assertInstanceOf('CM_Exception_Invalid', $exception);
     $languagePagingJavascriptOnly->set('foo', 'bar');
     $this->assertSame('bar', $language->getTranslations(true)->get('foo'));
     $this->assertSame('bar', $language->getTranslations()->get('foo'));
     $languagePagingAll->set('bar', 'foo');
     $this->assertSame('foo', $language->getTranslations()->get('bar'));
     $this->assertSame('foo', $language->getTranslations(true)->get('bar'));
     $languagePagingAll->remove('foo');
     $this->assertSame(null, $language->getTranslations()->get('foo'));
     $this->assertSame(null, $language->getTranslations(true)->get('foo'));
     $languagePagingJavascriptOnly->remove('bar');
     $this->assertSame(null, $language->getTranslations()->get('bar'));
     $this->assertSame(null, $language->getTranslations(true)->get('bar'));
 }
Exemplo n.º 13
0
 public function testSetUri()
 {
     $language = CM_Model_Language::create('english', 'en', true);
     $uri = '/en/foo/bar?foo1=bar1';
     $headers = array('Host' => 'example.ch', 'Connection' => 'keep-alive');
     /** @var CM_Http_Request_Abstract $mock */
     $mock = $this->getMockForAbstractClass('CM_Http_Request_Abstract', array($uri, $headers));
     $this->assertEquals($language, $mock->popPathLanguage());
     $this->assertSame('/foo/bar', $mock->getPath());
     $this->assertSame(array('foo', 'bar'), $mock->getPathParts());
     $this->assertSame(array('foo1' => 'bar1'), $mock->getQuery());
     $this->assertEquals($language, $mock->getLanguageUrl());
     $this->assertSame($uri, $mock->getUri());
     $mock->setUri('/foo1/bar1?foo=bar');
     $this->assertSame('/foo1/bar1', $mock->getPath());
     $this->assertSame(array('foo1', 'bar1'), $mock->getPathParts());
     $this->assertSame(array('foo' => 'bar'), $mock->getQuery());
     $this->assertNull($mock->getLanguageUrl());
     $this->assertSame('/foo1/bar1?foo=bar', $mock->getUri());
 }
Exemplo n.º 14
0
 /**
  * @return CM_Model_Language|null
  */
 public function getLanguage()
 {
     if ($language = $this->_getLanguageViewer()) {
         return $language;
     }
     if ($language = $this->getLanguageUrl()) {
         return $language;
     }
     if ($language = $this->_getLanguageBrowser()) {
         return $language;
     }
     return CM_Model_Language::findDefault();
 }
Exemplo n.º 15
0
 public function testRpcRequestTranslationJsNonExistentKey()
 {
     $exception = $this->catchException(function () {
         CM_Model_Language::rpc_requestTranslationJs('foo');
     });
     $this->assertInstanceOf('CM_Exception_Invalid', $exception);
     /** @var CM_Exception_Invalid $exception */
     $this->assertSame('Language key not found', $exception->getMessage());
     $this->assertSame(['phrase' => 'foo'], $exception->getMetaInfo());
 }
Exemplo n.º 16
0
Arquivo: 43.php Projeto: cargomedia/cm
<?php

CM_Model_LanguageKey::deleteByName('First');
CM_Model_LanguageKey::deleteByName('Next');
CM_Model_LanguageKey::deleteByName('Previous');
CM_Model_LanguageKey::deleteByName('Last');
if ($en = CM_Model_Language::findByAbbreviation('en')) {
    $en->setTranslation('.pagination.first', 'First');
    $en->setTranslation('.pagination.next', 'Next');
    $en->setTranslation('.pagination.previous', 'Previous');
    $en->setTranslation('.pagination.last', 'Last');
}
if ($de = CM_Model_Language::findByAbbreviation('de')) {
    $de->setTranslation('.pagination.first', 'Erste');
    $de->setTranslation('.pagination.next', 'Weiter');
    $de->setTranslation('.pagination.previous', 'Zurück');
    $de->setTranslation('.pagination.last', 'Letzte');
}
Exemplo n.º 17
0
 public function testGetTranslation()
 {
     $render = new CM_Frontend_Render();
     $this->assertSame('abc', $render->getTranslation('abc'));
     $this->assertSame('abc cool', $render->getTranslation('abc {$variable}', array('variable' => 'cool')));
     $this->assertSame('abc ', $render->getTranslation('abc {$variable}'));
     $this->assertSame('abc ', $render->getTranslation('abc {$variable}', array('foo' => 'bar')));
     $language = CM_Model_Language::create('Test language', 'test', true);
     $render = new CM_Frontend_Render(new CM_Frontend_Environment(null, null, $language));
     $language->setTranslation('abc {$variable}', 'translated stuff is {$variable}');
     $this->assertSame('translated stuff is cool', $render->getTranslation('abc {$variable}', array('variable' => 'cool')));
 }
Exemplo n.º 18
0
 /**
  * @expectedException CM_Exception_Invalid
  * @expectedExceptionMessage Language key `foo` not found
  */
 public function testRpcRequestTranslationJsNonExistentKey()
 {
     CM_Model_Language::rpc_requestTranslationJs('foo');
 }
Exemplo n.º 19
0
 /**
  * @param bool|null $fallbackToDefault
  * @return CM_Model_Language|null
  */
 public function getLanguage($fallbackToDefault = null)
 {
     $language = $this->getEnvironment()->getLanguage();
     if (null === $language && $fallbackToDefault) {
         if ($viewer = $this->getViewer()) {
             $language = $viewer->getLanguage();
         }
         if (null === $language) {
             $language = CM_Model_Language::findDefault();
         }
     }
     return $language;
 }
Exemplo n.º 20
0
 public function testGetLanguage()
 {
     $language = CM_Model_Language::create('English', 'en', true);
     $params = new CM_Params(array('language' => $language, 'languageId' => $language->getId(), 'no-object-param' => 'xyz'));
     $this->assertEquals($language, $params->getLanguage('language'));
     $this->assertEquals($language, $params->getLanguage('languageId'));
     try {
         $params->getLanguage('no-object-param');
         $this->fail('getObject should fail and throw exception');
     } catch (CM_Exception $e) {
         $this->assertSame('Model has no data', $e->getMessage());
         $this->assertContains(get_class($language), $e->getMetaInfo());
     }
 }
Exemplo n.º 21
0
Arquivo: TH.php Projeto: aladin1394/CM
 /**
  * @param string|null $abbreviation
  * @return CM_Model_Language
  */
 public static function createLanguage($abbreviation = null)
 {
     if (!$abbreviation) {
         do {
             $abbreviation = self::_randStr(5);
         } while (CM_Model_Language::findByAbbreviation($abbreviation));
     }
     return CM_Model_Language::create('English', $abbreviation, true);
 }
Exemplo n.º 22
0
Arquivo: 16.php Projeto: cargomedia/cm
<?php

$language = CM_Model_Language::findByAbbreviation('en');
$language->setTranslation('Please Confirm', 'Please Confirm');
Exemplo n.º 23
0
 /**
  * @param CM_Model_Language $language
  */
 public function setLanguage(CM_Model_Language $language)
 {
     CM_Db_Db::update('cm_user', array('languageId' => $language->getId()), array('userId' => $this->getId()));
     $this->_change();
 }